1. 程式人生 > >關於Activity的生命週期和任務棧的理解

關於Activity的生命週期和任務棧的理解

1.第一次啟動Activity的時候呼叫的方法 

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.v("520it", "onCreate 介面被建立的時候呼叫的");
    }
    
  

@Override
    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 介面可見的 但是無法操作(無法獲取焦點)時候呼叫的");
    }
    

@Override
    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 登入這種情況