Activity四种启动模式及相关Flag

2017-09-23  本文已影响42人  hjm1fb

Activity有四种启动模式

standard
默认模式,每次启动创建一个Activity,所属启动栈跟启动它的Activity一样。

singleTop
如果新的activity已经位于栈顶,这个时候新建Activity会复用这个Activity而不是新建Activity。此时onCreate(),onStart()不会调用,onNewIntent方法会被调用。
其他情况下,和standard模式相同。
singleTask
启动Activity时,会去寻找当前是否存在一个和taskAffinity名(默认是包名,可以通过Activity的android:taskAffinity属性指定)一样的任务栈。

利用singleTask的这个特性,我们可以将两个不同App中的Activity设置为相同的taskAffinity,这样虽然在不同的应用中,但是Activity会被分配到同一个Task中去。
singleInstance
此模式是在singleTask的基础上,再增加全局唯一性这个特性。
以singleInstance模式启动的Activity在整个安卓系统中是单例的,独占自己的一个任务栈。启动时如果已经存在实例(不管此实例是自己应用启动的,还是其他应用启动的),就复用实例,并回调onNewIntent方法 。

其他常用的影响启动模式的Flag

如果同时设置了android:launchMode=""属性和intent的flag属性,后者的优先级更高。
有跟四大启动模式对应的Flag,但这个对应关系有点复杂,一般情况下用属性设置就可以。
其他的常用Flag还有:

注:
startActivityForResult时,Flag的设置无效

参考文章:
android开发中如何结束所有的activity
基础总结篇之三:Activity的task相关
彻底弄懂Activity四大启动模式
Activity 启动模式分析

应用场景

Context.startActivity(intentFor<IndexActivity>().newTask().clearTask())
Runtime.getRuntime().exit(1)
上一篇 下一篇

猜你喜欢

热点阅读