android launchMode

作者: 糖葫芦_倩倩 | 来源:发表于2017-03-02 18:15 被阅读102次

    写在最前面的话,前几天一个前辈问我启动模式的问题,工作这么长时间,说实话,经常用的也就 singleTop singleTask ,让我遇到具体的问题了呢,我知道该使用哪种启动模式解决,有时候真说,还说不出来。结果就悲剧了,挺尴尬的,所以决定写篇文章结合自己的实际操作来细细说来。

    • Standard模式(默认)

    这个模式我就不多说了,系统默认的启动模式,也没什么特别的地方,每次启动一个Activity 都会创建一个实例。

    我们重点说下 singleTop singleTask

    • SingleTop
      字面上的意思呢就是:如果要在当前页面启动一个的Activity ,系统首先会判断这个Activity是不是位于栈顶,如果刚好是,那么系统就不会重新创建Activity,反之则会重新创建Activity的实例,下面我们来模拟这样一个场景:

    有三个Activity 分别是 A B C 启动顺序为:A→B→C 把A的启动模式修改为SingleTop 那么再次启动A ,栈里的顺序是什么样的?

    ![Upload notify5.gif failed. Please try again.]

    首先栈里的初始信息肯定是这样的:

    Paste_Image.png

    如果我们再次启动A ,我们看打印信息:

    Paste_Image.png

    从打印的日志可以看出A是重新又在栈里重新创建了,因为我们前面说过singleTop模式会判断A是否在栈顶,如果在就重新启动,不在就重新创建,那么现在我们把C改为singleTop,然后在C页面重新C,我们看打印结果:

    notify5.gif Paste_Image.png

    果不其然,这个C不会再重新创建的,因为C此时在栈顶,直接就利用C,不会重新创建。经过我亲自实验,大家应该就清楚了,这种启动模式一般能解决什么问题呢,比如:当我们快速点击button跳转界面的时候,可能会同时启动两个相同的 Activity ,如果你把启动模式修改singleTop 就不会出现两个一样的。

    • SingleTask
      简单的来讲呢,启动模式为此种的 Activity ,系统也是会首先判断是否位于栈顶,没有位于栈顶,如果在栈里已经存在,但是并没有在栈顶,则会把他之上的Activity全部清除掉,使自己位于栈顶,还是上面的A→B→C,到C页面后重新打开A,A 是singleTask ,我们来看下打印信息:
    Paste_Image.png

    当重新在C界面跳入A页面的时候,会发现,B,C出栈了,使A位于栈顶。

    • singleInstance
      这个我在开发中几乎没有用到过,可以用一张图来说明它的任务栈情况,我们设定B为singleInstance,如下图所示:
    Paste_Image.png

    这下可明白多了,你有没有觉着呢?哈哈哈哈哈哈哈哈哈哈哈哈......

    相关文章

      网友评论

        本文标题:android launchMode

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