天天看點

Android活動Acitivity啟動模式之singleTask

前面的文章介紹了Android 活動Activity的啟動模式:standard和singleTop。本文繼續介紹Activity的下一個啟動模式:singleTask。

       singleTask:當設定活動的啟動模式為singleTask時,首先檢查傳回棧中是否存在目前活動,如果存在目前活動的執行個體,則直接使用目前執行個體,并把目前活動之上的所有活動                                  pop出棧,即目前活動位于棧頂位置。

      代碼執行個體如下:

     (1)修改AndroidManifest.xml

                修改活動MainActivity的啟動模式為singleTask,如下:

<activity
            android:name=".MainActivity"
            android:launchMode="singleTask"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
           

      (2)修改MainActivity.java

           為了測試效果,重寫onRestart方法:

@Override
	protected void onRestart() {
		super.onRestart();
		Log.d("MainActivity", "onRestart");
	}
           

       (3)修改MyActivity1.java

           為了測試效果,重寫onDestroy方法:

@Override
	protected void onDestroy() {
		super.onDestroy();
		Log.d("MyActivity1", "onDestroy");
	}
           

      (3)重新釋出,檢視日志

          釋出程式,進入MainActivity活動,點選按鈕進入MyActivity1活動,點選按鈕回到主活動MainActivity,日志顯示如下:

Android活動Acitivity啟動模式之singleTask

       從圖中可以看出,當在MyActivity1中點選按鈕時,傳回棧中此時存在一個主活動MainActivity的執行個體,并且在MyActivity1的下面,當點選時,MyActivity1出棧,執行個體銷毀,調用onDestroy方法,而主活動則調用onRestart方法。

      如果再次在主活動中點選按鈕進入MyActivity1活動,此時會建立MyActivity1執行個體,再次傳回,見日志如下:

Android活動Acitivity啟動模式之singleTask

    這正是Activity啟動模式singleTask的特性。