1. 程式人生 > >Activity四種啟動模式說明

Activity四種啟動模式說明

1,standard標準模式:

每次啟動一個Activity都會重新建立一個例項,即呼叫Activity建立時的生命週期方法onCreate,onStart,onResume;被啟動的Activity會自動新增到啟動它的Activity的任務棧中,因此用ApplicationContext啟動standard模式的Activity時會報錯(Context沒有所謂的任務棧)

2,singleTop棧頂複用模式:

新啟動的Activity已經位於任務棧的棧頂,那麼此Activity將不會被重建,而是會回撥其onNewIntent方法,如果新啟動的Activity不是位於棧頂,此時將重新建立新的Activity例項並新增到棧頂.

3,singleTask棧內複用模式:

這是一種簡單的單例模式,這種模式下只要被啟動的Activity位於棧內,那麼無論它是否位於棧頂都不會重新建立新的Activity例項,而是直接將其調回到棧頂並回調其onNewIntent方法,如果在其上有其他Activity的時候會將這些Activity進行出棧處理

4,singleInstance單例項模式:

這是一種加強的singleTask模式,除了具有singleTask的特點外還加了一點,具體此模式的Activity會單獨位於一個獨立的任務棧,如ActivityA為singleInstance啟動模式,當A啟動後,系統會單獨為其建一個任務棧,A將獨自位於這個任務棧中,以後的請求均不會建立新的Activity直至這個任務棧被銷燬.

任務棧的指定:

AndroidMenifest中設定

<activity
            android:name=".TestActivity" Activity類名
            android:allowTaskReparenting="true" 允許應用外的請求啟動此Activity
            android:configChanges="screenSize" 設定螢幕的一些引數,例如取消橫豎屏切換
            android:launchMode="singleTask" Activity啟動模式
            android:taskAffinity="com.abc.task" /> 設定Activity所屬棧名
android:taskAffinity標籤設定了棧名,此標籤只在兩種情況下起作用,一種為singleTask啟動模式下的Activity,另一種為配合andriod:allowTaskReparenting使用;

allowTaskReparenting為ture時,當應用A啟動了應用B的某個Activity,當應用B也被啟動後,此Activity會直接從應用A的任務棧轉移到應用B的任務棧中

Activity啟動模式還可以再程式碼中進行設定:

Intent intent = new Intent();
        intent.setClass(this,TestActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);
程式碼設定會優先於清單檔案設定