美文网首页Android性能优化
Android的启动模式:singleTask与singleTo

Android的启动模式:singleTask与singleTo

作者: 码途有道 | 来源:发表于2018-08-06 15:49 被阅读0次

    最近有小伙伴询问Activity的启动模式是使用singleTask好还是singleTop好,在两种模式中纠结,所以今天就简单讲解一下两种模式的使用场景!

    Android 的四种启动模式(网上一搜一堆哦)

    • standard:默认模式,允许多实例
    • singleTop:相比于standard,有新的启动请求时,只有在目标Activity处于当前栈顶时,才会调用onNewIntent()而不创建新实例,其他情况都和standard一致
    • singleTask:设置了singleTask启动模式的Activity,它在启动的时候,会先在系统中查找属性值affinity等于它的属性值taskAffinity的任务存在;如果存在这样的任务,它就会在这个任务中启动,否则就会在新任务中启动。因此,如果我们想要设置了singleTask启动模式的Activity在新的任务中启动,就要为它设置一个独立的taskAffinity属性值。如果设置了singleTask启动模式的Activity不是在新的任务中启动时,它会在已有的任务中查看是否已经存在相应的Activity实例,如果存在,就会把位于这个Activity实例上面的Activity全部结束掉,即最终这个Activity实例会位于任务的堆栈顶端中。
    • singleInstance:和singleTask相比,不同点在于singleInstance activity所在的task只会有这一个activity

    Activity的任务栈(Task)简述

    • Application启动时,系统会为Application创建一个任务栈(Task)
    • 我们对Activity的打开和关闭操作,就是将Activity压入(push)任务栈和从任务栈中弹出(pop)的操作
    • 任务栈遵循先进后出的原则,在栈顶的Activity就是设备当前显示的Activity
    • singleTasksingleTop一般都是为了保证Activity在任务栈中的唯一性

    singleTop的使用

    使用singleTop模式的Activity在栈顶时只会在Task中存在一个实例,所以可以在以下场景中使用:

    • 要打开的Activity处于栈顶,点击通知栏打开栈顶的Activity
    • Activity需要启动一个Service,最后Service对栈顶Activity进行操作
    • 特定情况时,如进行数据刷新,自己跳转自己,走onNewIntent()刷新数据
    • 等等......

    总之,singleTop比较适用于childActivity(非主架构Activity)

    singleTask的使用

    • 当Task中存在Activity实例,不会创建Activity,而是销毁Activity上面所有其他的Activity,以此来使将要跳转的Activity至于栈顶显示,如果不存在,则在栈顶创建一个Activity实例(所以假如有人问如何快速关闭100个Activity,只要给跳转的Activity设置singleTask即可
    • 单独的使用singleTask,并不会创建一个新的Task
    • singleTask的Activity如果设置了独立的taskAffinity属性值,启动时就会在新的Task中,否则会在已有Task中

    所以基于以上特性,比较适合主架构Activity(例MainActivity)设置为singleTask,或者一些经常使用,但是关闭和跳转不规律的Activity

    相关文章

      网友评论

        本文标题:Android的启动模式:singleTask与singleTo

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