Activity的啟動模式由四種:standard,singleTop,singleTask和singleInstance??梢栽贏ndroidManifest.xml中給activity標(biāo)簽指定android:launcherMode屬性來選擇啟動模式。
standard是默認(rèn)的啟動方式,所有的啟動的activity都只存在一個棧當(dāng)中,并且遵循先進(jìn)后出的原則。
<activity android:launcherMode:"standard">//默認(rèn)存在,可加可不加</activity>singleTop:當(dāng)活動的啟動模式指定為singleTop,在啟動活動時如果發(fā)現(xiàn)返回棧頂已經(jīng)是該活動,則可以直接使用,不會創(chuàng)建新的活動實(shí)例。
<activity android:launcherMode:"singleTop"></activity>但是如果有B活動進(jìn)入了同一個棧,而B活動又可以重新建立之前的A活動的話,這時候A活動會被新建一個實(shí)例,這樣也會影響用戶的體驗(yàn)。也就是說singleTop可以很好的解決重復(fù)創(chuàng)建棧頂活動的問題,但是活動沒有處于棧頂?shù)奈恢眠€是可能創(chuàng)建多個活動實(shí)例。
singleTask:每次啟動A活動時系統(tǒng)先會在返回棧中檢查是否存在A活動的實(shí)例,如果沒有發(fā)現(xiàn)已經(jīng)存在則直接使用該實(shí)例,并把這個活動之上的所有活動統(tǒng)統(tǒng)出棧,如果沒有發(fā)現(xiàn)就會創(chuàng)建一個新的A活動實(shí)例。
<activity android:launcherMode: "singleTask"></activity>singleInstance:設(shè)置了該模式的activity會在每次啟動的時候會啟用一個新的返回棧來管理該活動,可以實(shí)現(xiàn)共享活動實(shí)例的問題:
<activity android:launcherMode:"singleInstance"></activity>主要方法:
getClass().getSimpleName();實(shí)現(xiàn)過程代碼: 先創(chuàng)建一個新的BaseActivity,并繼承Activity,在onCreate()中寫入以下代碼:
log.i("TAG", getClass().getSimpleName());然后把各個activity的的繼承關(guān)系改為BaseActivity,這樣就相當(dāng)于每個activity在啟動的時候走先走父類的onCreate方法,執(zhí)行打印語句,打印出當(dāng)前的活動名稱。
創(chuàng)建一個新的類:
public class ActivityCollection{ public static void addActivity(Activity activity){ activities.add(activity); } public static void removeActivity(Activity activity){ activities.remove(activity); } public static void finishActivity(){ for(Activity activity : activities){ if(!activity.isFinishing()){ activity.finish(); } } }}在BaseActivity的onCreate、onDestroy方法中調(diào)用addActivity、removeActivity的方法,就是在每次啟動子活動的時候都可以在List添加Activity元素或者殺死一個Activity,若要在某個特定的活動中通過某個特定的方式殺死一個活動則調(diào)用finishActivity方法:
ActivityCollection.finishActivity();當(dāng)一個活動中需要用到一些重要的參數(shù),需要啟動活動的時候必須傳遞進(jìn)來,那我們最好在需要啟動的活動中添加如下代碼,方便后來者或自己知道要傳入什么類型的參數(shù):
public static void actionActivity(Context context, String data1, String data2){//這里參數(shù)不一定是String,根據(jù)具體情況而定。 Intent intent = new Intent(context, SecondActivity.class) intent.putExtra("param1", data1); intent.putExtra("param2", data2); context.startActivity(intent);}在啟動需要參數(shù)的活動的時候只要調(diào)用相應(yīng)的方法并傳入?yún)?shù)即可:
SecondActivity.actionActivity(FristActivity.this, "data1", "data2");新聞熱點(diǎn)
疑難解答