美文网首页
Activity四种启动模式及相关Flag

Activity四种启动模式及相关Flag

作者: hjm1fb | 来源:发表于2017-09-23 16:58 被阅读42次

Activity有四种启动模式

  • standard
  • singleTop
  • singleTask
  • singleInstance

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

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

  • 如果不存在,则会创建一个新的Task,并创建新的Activity实例入栈到新创建的Task中去。
    如果存在,则得到该任务栈,查找该任务栈中是否存在该Activity的实例:
    • 如果存在实例,则将它上面的Activity实例都出栈,然后回调启动的Activity实例的onNewIntent方法。
    • 如果不存在该实例,则新建Activity,并入栈。

利用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 启动模式分析

应用场景

  • 重启APP
Context.startActivity(intentFor<IndexActivity>().newTask().clearTask())
Runtime.getRuntime().exit(1)

相关文章

网友评论

      本文标题:Activity四种启动模式及相关Flag

      本文链接:https://www.haomeiwen.com/subject/fducextx.html