天天看點

Activity四種啟動模式詳解1. standard 2. singleTop 3. singleTask 4. singleInstance

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