Activity四种启动模式及其应用

作者: 一只好奇的茂 | 来源:发表于2017-10-13 17:03 被阅读82次
    • standard,创建一个新的Activity。
    • singleTop,栈顶不是该类型的Activity,创建一个新的Activity。否则,onNewIntent。
    • singleTask,回退栈中没有该类型的Activity,创建Activity,否则,onNewIntent+ClearTop。
    • singleInstance,回退栈中,只有这一个Activity,没有其他Activity。

    standard

    简介:

    每次激活Activity时(startActivity),都创建Activity实例,并放入任务栈;


    应用场景:

    比如从应用列表页中,点击应用详情,就可以用standard,一般情况下,都可以用standard。

    singleTop

    简介:

    如果某个Activity自己激活自己,即任务栈栈顶就是该Activity,则不需要创建,其余情况都要创建Activity实例;


    应用:
    • 在通知栏点击收到的通知,然后需要启动一个Activity,这个Activity就可以用singleTop,否则用户如果连续点击好几次,每次都会新建一个Activity。
    • 实际的开发过程中,测试妹纸没准给你提过这样的bug:某个场景下连续快速点击,启动了两个Activity。如果这个时候待启动的Activity使用 singleTop模式也是可以避免这个Bug的。
    • 在开发过程中,我们有一个场景是从城市列表页选择东京,跳到东京页,再从东京页跳到大阪页,其实东京页和大阪页都是同一个activity,我们需要从大阪页点击返回时,能够直接回到城市列表页,这个时候,用singleTop也是能够很好解决这个问题的。

    singleTask

    简介:

    如果要激活的那个Activity在任务栈中存在该实例,则不需要创建,只需要把此Activity放入栈顶,并把该Activity以上的Activity实例都pop;


    应用
    • 最近在做的,在问题详情页,点击进入回答页,回答完并finish后,回到问答详情页;如果问题详情页采用standard方式,将两次创建问题详情页,而采用singleTask则可避免该问题。
    • 例如浏览器的主界面。不管从多少个应用启动浏览器,只会启动主界面一次,其余情况都会走onNewIntent,并且会清空主界面上面的其他页面。

    singleInstance

    简介

    这个模式非常接近于singleTask,系统中只允许一个Activity的实例存在。区别在于持有这个Activity的任务中只能有一个Activity:即这个单例本身。

    应用
    • 例如锁屏、电话、闹铃提醒,将闹铃提醒与闹铃设置分离。
    • singleInstance不要用于中间页面,如果用于中间页面,跳转会有问题,比如:A -> B (singleInstance) -> C,完全退出后,在此启动,首先打开的是B。
    • 如果应用1的任务栈中创建了MainActivity实例,如果应用2也要激活MainActivity,则不需要创建,两应用共享该Activity实例;


    参考

    singleInstance模式下的坑
    singleInstance作为中间页的问题
    Activity的LaunchMode应用场景思考

    相关文章

      网友评论

        本文标题:Activity四种启动模式及其应用

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