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" 啓動方法
<
activityandroid: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);
    }
參考網址:
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章