定義了
Activity加載到Activity Task(任務棧)的行為
Activity的LaunchMode(啟動模式)有以下四種:
[假設操作的Activity對象為A_Activity]
1. Standare - Activity默認的啟動模式
在Standare模式下啟動A_Activity, 系統(tǒng)都會新建一個A_Activity的實例, 并將其加入到任務棧中, 同時依次調(diào)用A_Activity的onCreate()、onStart()、onResume()的生命周期方法
2. SingleTop - 棧頂復用模式
在SingleTop模式下啟動A_Activity, 如果A_Activity位于任務棧的棧頂, 那么再次啟動A_Activity時, 系統(tǒng)將不會再去新建一個A_Activity實例,而是復用已位于任務棧棧頂?shù)?code>A_Activity
-
A_Activity位于棧頂:復用位于棧頂?shù)膶嵗? 并回調(diào)
A_Activity的onNewIntent()方法 -
A_Activity不位于棧頂(包括有實例位于任務棧中但不位于棧頂和在任務棧中沒有任何實例)此時在SingleTop的模式下啟動的
A_Activity與Standard模式下啟動的A_Activity的流程是一樣的: 系統(tǒng)會新建一個A_Activity的實例, 并依次調(diào)用其對應的生命周期方法
3. SingleTask - 棧內(nèi)復用模式
該模式相當于Activity在特定任務棧中的單例模式. 與SingleTop類似, 只不過是檢測范圍的不同: SingleTop的檢測范圍是檢測棧頂元素是否為A_Activity, 而SingleTask的檢測范圍則擴散到整個任務棧中去檢測是否已經(jīng)存在A_Activity實例
-
任務棧中存在
A_Activity實例直接將
A_Activity置于棧頂,并將A_Activity以上的Activity都從任務棧中移出銷毀, 同時回調(diào)其onNewIntent()方法 -
任務棧中不存在任何
A_Activity實例此時在SingTask的模式下啟動的
A_Activity與Standard模式下啟動的A_Activity的流程是一樣的: 系統(tǒng)會新建一個A_Activity的實例, 并依次調(diào)用其對應的生命周期方法
4. SingleInstance
這個模式非常接近于SingleTask, 系統(tǒng)中只允許一個A_Activity的實例存在. 區(qū)別在于持有A_Activity的任務棧中只能有這個一個Activity: 即這個單例本身
設置Activity的啟動模式
方式一: 直接在AndroidManifest.xml指定Activity的啟動模式
<?xml version="1.0" encoding="utf-8"?>
<manifest>
<application>
<activity
android:name=".XxxActivity">
android:launchMode="standard | singleTop | singleTask | singleInstance">
</activity>
</application>
</manifest>
方式二: 通過Intent添加IntentFlag(猛戳>>常用的IntentFlag的介紹)來指定Activity的啟動模式
Intent intent = new Intent();
intent.setClass(MainActivity.this,TargetActivity.class);
intent.addFlags(Intent.FLAG_XXX);
startActivity(intent);