啓動模式 launchMode小記

android 的activity啓動後是放在一個個的棧裏面的,但根據啓動模式的不同,對棧裏面的activity的處理機制不同。

以下,以A代表launchMode爲standard的activity,B爲對應launchMode的activity

1:standard

默認的launchMode,啓動的activity直接push到棧中。公式爲AB+B=ABB;ABA+B=ABAB;

2:singleTop

此模式的activity在棧頂只能有一個,公式爲AB+B=AB;ABA+B=ABAB;

3:singleTask

此模式下同一個棧中只能有一個此activity,啓動新此activity時,調用舊activity中的newIntent方法,此activity上的其他activity全部銷燬

公式爲AB+B=AB;ABA+B=AB

另外,如果在另一個程序中有XY兩個activity,想到啓動此程序中AB中的Bactivity,則爲XY+AB=XYAB,而不是XYB

4:singleInstance

此模式下的activity只能存在一個,哪怕是不同的棧


注意:5.0之前的系統,啓動singleTask和singleInstance模式的activity時,如果是調用的startActivityForResult();方法,則會直接回調onActiivtyResult();而不會於去等待返回.5.0後不會


5:Intent.FLAG_ACTIVITY_NEW_TASK

 在新的棧中打開新activity.通常使用在service中啓動Actitity的場景中,因爲在service中並不存在activity棧,若不加這一條啓動模式service是不能啓動activity的。

當然一般不推薦在service中啓動activity

6:FLAG_ACTIVITY_SINGLE_TOP=singleTop

7:FLAG_ACTIVITY_CLEAR_TOP=singleTask

8:FLAG_ACTIVITY_NO_HISTORY 感覺沒多少用,以此模式啓動的activity在啓動其它activity後自動銷燬。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章