關於Activity的生命週期和任務棧的理解
1.第一次啟動Activity的時候呼叫的方法
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.v("520it", "onCreate 介面被建立的時候呼叫的");
}
protected void onStart() {
super.onStart();
Log.v("520it", "onStart 介面可見的時候呼叫的");
}
@Override
protected void onResume() {
super.onResume();
Log.v("520it", "onResume 介面可見的 並且能夠獲取焦點(能跟使用者進行互動)時候呼叫的");
}
2,從AActivity 跳轉到BActivity時候;(沒有finish()))調取時候
會調取AActivity 中的 onPause() 和 onStop()
@Override
protected void onPause() {
super.onPause();
Log.v("520it", "onPause 介面可見的 但是無法操作(無法獲取焦點)時候呼叫的");
}
protected void onStop() {
super.onStop();
Log.v("520it", "onStop 介面不可見的時候呼叫的");
}
3,再點選後退時候,再次調取AActivity中的onStart() 和onResume() 方法,不會調取onCreate();意思是說,當前介面沒有銷燬的時候,是不會調取onCreate()
@Override
protected void onStart() {
super.onStart();
Log.v("520it", "onStart 介面可見的時候呼叫的");
}
@Override
protected void onResume() {
super.onResume();
Log.v("520it", "onResume 介面可見的 並且能夠獲取焦點(能跟使用者進行互動)時候呼叫的");
}
4,直到點選退出的時候會調取 onDestroy()
@Override
protected void onDestroy() {
super.onDestroy();
Log.v("520it", "onDestroy 介面被銷燬的時候呼叫的");
}
下面是一張生命週期圖
下面我來說一下 任務棧
<activity
android:name="com.m520it.taskstack.BActivity"
android:label="@string/app_name"
android:launchMode="standard" >
</activity>
android:launchMode 有一下幾種
1 standard預設的模式 以棧的形式儲存到應用容器中 ,啟動一次,就會把它放到棧
點選返回的需要一層一層的出來
2 singleTop 如果該Activity在棧頂 就不會重新啟動了
<activity
android:name="com.m520it.taskstack.BActivity"
android:label="@string/app_name"
android:launchMode="singleTop " >
</activity>
因為把BActivity 設定成 singleTop 由於BActivity 在棧頂不會再次建立新的Activity
3.singleTask 如果應用沒有該AACtivity 則直接建立
如果發現該應用有AACtivity 那麼會刪除配置了該模式的AC棧上面的所有AC 而且不會再次建立本身
這兩個圖片的變化就是 singleTask 乾的事情
4 singleInstance (容器提前)
就是配置了該模式的AC 如果沒有建立就自己建立一個容器並把AC放進去 "並把自己的容器提前"
如果AC已經存在了 再次啟動AC "把自己的容器提前了"
如果一個應用裡面 BAC配置了該模式 此時B已經啟動 此時B所在的容器提到最前
此時如果有新的AC被啟動 其他的容器會提前 並在最前面的容器裡新增該新的AC
使用場景
singleTask
singleTop 登入這種情況