一、activity的生命週期
onCreate(),新建一個活動時調用該方法,並把當前活動放入返回棧的棧頂。
onStart(),活動從不可見到可見,出現頁面。
onResume(),活動準備好進行交互了。
onPause(),表示當前不能進行交互,系統準備去啓動活着恢復另一個活動時,總是先pause當前活動,再去看其他命令。(例如果出現dialog請求,也就是當前頁面前懸浮一個小頁面的對話框請求,當前頁面暫停,不能進行交互,恢復後要回到onResume()方法)
onStop(),當前活動跳轉別的活動,當前活動stop,恢復後回到onRestart()方法,再onStart向後推進。
onDestroy(),退出本活動時,活動銷燬,出棧。
例:
MainActivity、NormalActivity、DialogActivity(對話型活動)
<activity
android:name=".P2_DialogActivity"
android:theme="@style/Theme.AppCompat.Dialog" />
1.點開主活動MainActivity
MainActivity:onCreate();onStart();onResume();
2.MainActivity跳轉NormalActivity
MainActivity:onPause();onStop();
NormalActivity:onCreate();onStart();onResume();
3.NormalActivity返回MainActivity
NormalActivity:onPause();onStop();onDestroy();
MainActivity:onRestart();onStart();onResume();//back不用新建,沿着返回棧返回即可
4.MainActivity對話DialogActivity
MainActivity:onPause();
DialogActivity:onCreate();onStart();onResume();
5.DialogActivity退回MainActivity
DialogActivity:onPause();onStop();onDestroy();
MainActivity:onResume();
6.退出MainActivity
MainActivity:onPause();onStop();onDestroy();
二、activity活動啓動模式
standard、singleTop、singleTask、singleInstance
屬性在AndroidManifest.xml裏修改
<activity
android:name=".P2_LaunchTypeActivity"
android:launchMode="singleTask"
></activity>
1.standard:
默認啓動方式,離開本活動創建新活動時本活動入棧頂,新建時不會管棧裏有沒有本活動,都會新建活動。
例:
Button button_standard=(Button)findViewById(R.id.button_standard); button_standard.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent standrad=new Intent(P2_LaunchTypeActivity.this,P2_LaunchTypeActivity.class);<!--訪問當前活動--> startActivity(standrad); } });
點擊按鈕三四下,還是一樣的界面,還是這個活動,但要返回三四下才能徹底退出此活動,說明這裏已經不是當時的頁面了,而是新建了兩三個界面。
注:這裏與back跳到另一個會話再返回本活動不一樣,intent與back機制不一樣,back是直接沿用返回棧,棧頂活動出棧,下一個活動變當前活動,intent根據活動啓動模式而看是新建還是去找棧裏的某個活動。
2.singleTop:
如果返回棧的棧頂已經是該活動,則可以直接使用它,不用新建。
例:activity1請求activity1,不會新建,因爲當前activity1已在棧頂;但如果activity1請求activity2,activity2再請求activity1,因爲activity2在棧頂,所以會新建activity1。
3.singleTask:(最常用)
只要棧裏任意位置有該活動,則直接使用,並且把它之上的所有其他活動都移出棧外。
例:activity1請求activity2,activity2再請求activity1,回到已有的activity1界面,activity2被destroyed。
4.singleInstance:
可以給該活動單獨有一個返回棧,可以多個程序共享該返回棧,共同管理該活動。
不如此的話,本來是每個程序都有自己的返回棧,如果啓動該活動,每個都要新建實例。
可通過getTaskId()來看所在棧是否爲同一個。