通過 adb shell dumpsys activity ,對於4種launchmode進行分析
standerd:
標準啟動模式,在每次啟動activity時都會建立乙個新的activity。
歸屬棧:activity會被壓入啟動它的activity所在棧。
singletop:
如果activity在棧頂,則不會重新建立activity,同時呼叫activity的onnewintent方法。如果要啟動的activity不在棧頂,則會建立新的activity。
歸屬棧:如果是建立新的activity,和standerd一樣,activity會被壓入啟動它的activity所在棧,這裡與flag_activity_single_top該flag類似。
singletask:
如果要啟動的activity已經存在,則不會建立該activity,並將該棧位於activity之上的所有其他activity出棧,同時呼叫activity的onnewintent方法。如果該activity不存在,則會建立新的activity。
singleinstance:可以理解為全域性單例,如果activity不存在,建立乙個新棧,棧中只會存在唯一乙個activity例項。
intent intent = context.getpackagemanager().getlaunchintentforpackage(pkgname);
intent.setaction(intent.action_main);
intent.addcategory(intent.category_launcher);
intent.setflags(intent.flag_activity_new_task | intent.flag_activity_reset_task_if_needed);
context.startactivity(intent);
這種方式有個問題,總是啟動的是該棧的mainactivity,而不是按原先的activity順序將整個棧移到最前面,最後發現intent.setpackage(null),將intent的packagename設定為null後正常,這個問題比較困惑,初步跟蹤ams,確實有判斷intent 的package 屬性是否設定,並進行相應處理,但細節還未跟蹤,這裡記錄下次分析跟蹤。
android 啟動模式
啟動模式是通過在androidmanifest.xml中activity標籤中的launchmode設定的 android launchmode指示應該如何載入乙個activity.總共有四種啟動模式,他們一般配合activity啟動標記 flag activity 常量 一起使用來決定當載入乙個a...
Android啟動模式
android使用棧來管理activity。android的 啟動模式共4種分別為standard singletop singletask singleinstance。假如firstactivity在棧頂,此時如果繼續構建firstactivity,還會繼續構建firstactivity 如果f...
android啟動模式實踐
現在有乙個需求。從a跳到b,然後b跳到c,c再跳到a,看似很簡單的就可以實現,但是當簡單的跳轉後,發現棧中的activity順序從下到上一次是abca,當我最後跳到a時,返回鍵時,首先出來的是c,依次是b,然後還是a,實際中,這樣是不符合邏輯的,這裡我們就用到了activity的啟動模式。我們將a的...