美文网首页
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