启动模式 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后自动销毁。




你可能感兴趣的:(android)