美文网首页Android技术知识Android开发Android开发经验谈
Android中四种启动模式,最容易理解的小白教程

Android中四种启动模式,最容易理解的小白教程

作者: HelloMrLi | 来源:发表于2018-09-13 17:10 被阅读6次

    说起Android中的启动模式,其实是个很基础的内容,谁都知道是4中启动模式,没错分别是以下四种:

    1,standard

    2,singleTop

    3,singleTask

    4,singleInstance

    关于高深的纯理论说明这里就不多做赘述,毕竟文字说明太饶人,这里就准备说点简单的,能看得见的,现在开始吧。

    第一种:standard(默认)

    关于这种模式,大家都知道,就是Android默认的启动模式,就是不显示指定,就是这种模式。现在有FirstActivity和SecondActivity两个界面,代码里都打印了当前实例和taskId,格式为xx/xx

    测试情景:重复跳转自己(自己设置standard)

    794为task的Id,前面的为当前实例对象,可见每次都是新建的,并不是复用的。@f37d177是第一个页面,一共跳转了三次。同样退出应用也用了三次。

    结论:standard模式下,会不断地新建activity实例,都放入同一个task中

    第二种:singleTop

    测试情景一:重复跳转自己(自己设置singleTop)

    看起来好像没有点击一样,其实是点击了的,注意看Actionbar上的点击计数,点击了3次,三次的实例和taskId都是没有变化的,且最后退出应用就用了一次点击,如下图:

    测试情景二:循环跳转到目标页面(SecondActivity设置singleTop)

    可以看到两次跳转到SecondActivity时,实例都不一样,且最后返回到桌面也是和进入的次数一样多。这里进入了两次SecondActivity,且最终从SecondActivity退出应用,一共用了4次,如下图

    结论:顾名思义,singleTop,如果当前实例在当前的task的栈顶,则直接复用,测试情景一;如果当前实例不再栈顶,则新建实例,如测试情景二,因为每次都是从FirstActivity跳转到SecondActivity的,虽然第二次跳转到SecondActivity的时候已经存在了SecondActivity实例,可是因为不在栈顶,所以又新建了一个SecondActivity实例。

    第三种:singleTask

    测试情景一:重复跳转自己(自己设置singleTask)

    跳转了自己4次,可以看到实例和taskId都是没有变化,且最后一次就能退出应用,如下图:

    测试情景二:循环跳转到目标页面(SecondActivity设置singleTask)

    这里我们注意到一开始FirstActivity的实例为a2c5349,然后跳转到SecondActivity一直都是5d5dd2a,而且taskId两个界面也是一致的,最后在SecondActivity按了一次返回键,这里直接返回到了最初的5349实例界面,也就是第一个界面,如下图:

    结论:设置了singleTask的页面,只要是task中有这个实例,就会一直复用,而且每次复用这个已存在的实例,都会清空上面的其他实例(这里的FirstActivity),将自己直接提升到栈顶位置,也就是显示自己

    第四种:singleInstance

    测试情景一:重复跳转自己(自己设置singleInstance)

    跳转了5次,但是可以发现实例和task的值都没有变化,退出应用也只是一次退出,如下图:

    测试情景二:循环跳转到目标页面(SecondActivity设置singleInstance)

    可以看到一开始从FirstActivity跳转跳转到SecondActivity的时候,taskId发生了变化,FirstActivity的id是863,但是跳转到SecondActivity的时候变成了864,然后后面每次跳转到SecondActivity的时候实例和task的id都是没有变化;说说返回的场景

    如果最后从FirstActivity返回,那么会把之前压入栈的FirstActivity全部返回完之后才是SecondActivity页面,然后一次就能退出应用;

    如果最后从SecondActivity页面返回,那么一次就回到FirstActivity,然后把之前压入栈的FirstActivity全部返回完就退出了应用;

    压入栈的如下图所示:

    结论:设置了singleInstance的页面,初始时都是新建一个task栈给这个页面,然后后面一直复用这个栈内的页面。注意,只有这种模式会新建一个栈给初始化的页面。最后返回的规律是,先把本页面所在的栈头出完,然后再出下一个栈的每个页面。

    至此,四种模式简单分析完毕,希望能给大家一个直观的理解

    上一篇:IDEA或者AS 中关于Git的常用操作

    相关文章

      网友评论

      • 猫KK:您好,我想请问下,当 A 启动 一个模式为singleTask 的B ,B再启动一个模式为singleInstance 的C ,C再启动一个模式为standard D,D再启动B 时,会将B也一起清除,为什么呢?singleTask模式不是清楚当前栈的而已吗?
        HelloMrLi:@猫KK 会啊,因为你最后从C返回了
        猫KK:@HelloMrLi 就是A->B->C->D->B,但是此时从B返回,将会直接回到A,在返回就直接退出应用了,C已经被销毁了。我的问题就是C是在另一个任务栈中的,也会一起销毁吗?
        HelloMrLi:你好,从你描述的来看,你再次启动B时,会复用之前的B,你说的清除掉是什么意思?
        A->B->C->D->B,此时如果从B返回,将会直接到A,然后再到C,然后直接退出应用

      本文标题:Android中四种启动模式,最容易理解的小白教程

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