1. standard 2. singleTop 3. singleTask 4. singleInstance
1. 使用 1. 在manifest中activiy标簽中設定launchMode 2. 代碼中使用intent啟動activity時指定flag,此方法與launchMode并不是一一對應的,并且優先級高于launchMode 2. 詳細說明 1. standard 預設與啟動的activity位于用一個task棧,忽略指定的棧名。除非啟動該activity的activity為singleInstance模式。每次都會在棧頂建立一個activity執行個體 2. singleTop 預設與啟動的activity位于用一個task棧,忽略指定的棧名。除非啟動該activity的activity為singleInstance模式。若棧頂恰好為打開的activity執行個體,不建立新的執行個體,複用該棧頂執行個體,複用時會調用該activity的onNewIntent-Restart-Onstart-OnResume(不調用OnCreate) 3. singleTask 預設與啟動的activity位于用一個task棧,忽略指定的棧名。除非啟動該activity的activity為singleInstance模式。若棧記憶體在與打開的activity相同的執行個體,不建立新的執行個體,複用該棧頂執行個體,并清除相同task棧内該執行個體上部所有執行個體,具有clear top效果。複用時會調用該activity的onNewIntent-Restart-Onstart-OnResume(不調用OnCreate)。注:啟動singleTask的activity時,若該singleTask的activiy指定了taskAffinity也就是Task棧名,系統會判斷該棧名與啟動的activiyt所在的棧名是否相同,如不同則建立該task棧用來存放該activiy 4. singleInstance singleTask的更新版。必須單獨存在于一個task棧内,使用singleInstance的activityA打開其他非singleInstance的activityB時,由于兩個不能處于同一個task棧内,會使用activityB指定的task棧,未指定的話建立task棧存儲 3. android:taskAffinity用來指定預設棧名 android:launchMode = "standard" 啟動方法 < activity android:name = ".launchmode.ActivityA" android:taskAffinity = "com.task.a1" android:launchMode = "standard" /> 4. activity的launchMode不是預設時,需要注意重寫activity的onNewIntent方法,否則複用activity時該activity無法重新獲得intent啟動資料:例如 @Override protected void onNewIntent(Intent intent) {
Log.i("test","onNewIntent..." );
setIntent(intent);
processExtraData();
super .onNewIntent(intent); } private void processExtraData(){
String value = getIntent().getStringExtra("test" );
Log.i("test","value===>"+ value);
} 參考網址: http://blog.csdn.net/zhuzp_blog/article/details/51367477 http://blog.csdn.net/itluochen/article/details/52599083 http://www.cnblogs.com/zhangming-blog/articles/5332954.html