美文网首页
Activity启动模式详解

Activity启动模式详解

作者: 阳光的nick_lxz | 来源:发表于2018-07-23 11:43 被阅读0次

    Activity的启动模式分为四种。(standard、singleTop、singleInstance、singTask);

    任务栈

    将启动模式之前,先介绍一下任务栈(Activity返回栈),既然是栈,那肯定遵循后进先出。它是用来存放Activity的,当我们点击桌面图标的时候,如果之前没有启动,对于andorid系统来说,会新开一个任务栈,并把我们的MainActivity压入栈中。这个时候一般就是我们看到的APP首页了,

    图一

    一 standard(默认启动模式)

    每次启动Activity都会在Activity栈顶上新建一个实例。

    eg:如上图,C启动ABC任意一个时,都会在C上面创建出一个新的Activity实例。

    生命周期:onCreate、onStart、onResume都会被调用。

    图二

    二 singleTop(栈顶复用)

    当意图启动一个Activity时,会先判断要启动的Activity是否在栈顶,如果在,则不会创建新的实例。否则,创建新的实例。

    eg:如上图,如果在C中启动C,则不会创建新的实例,如果在C中启动AB,都会在C上面重新上传一个新的实例

    生命周期:若情况一中栈顶的Activity被直接复用时,它的onCreate、onStart不会被系统调用,由于它并没有发生改变。可是一个新的方法 onNewIntent会被回调(Activity被正常创建时不会回调此方法)。

    图三

    三 singleTask (栈内唯一)

    当意图启动一个Activity时,会先判断要启动的Activity是否在栈中,如果在,咋把在它上面的所有Activty出栈,使之出于栈顶(不会创建新的实例),否则,创建一个新的实例入栈。


    图四

    eg: 如图一 此时如果在C中启动A,则BC会出栈,A就处于栈顶。

    生命周期:同SingleTop 模式中的情况一同样。仅仅会又一次回调Activity中的 onNewIntent方法

    四 singleInstance(独享栈)

    全局单例模式,一个Activity占有一个完整的任务栈,意图启动这个Activity,如果任务栈存在,则复用,否则新建一个任务栈。


    图五

    五 onNewIntent 和configchanges

    onNewIntent

    通过上面启动模式的分析,我们知道,onNewIntent方法会在以下情况下调用:

    1. singleTop模式下意图启动的Activity正处于栈顶。
    2. singTask模式下意图启动的Activity存在于栈内。
    3. singleInstance模式下意图启动的Activity所在的任务栈存在。(该情况下无法通过setIntent传值)

    configchanges

    默认情况下,当系统配置发生变化时(屏幕旋转,系统导航栏变化,fontScale改变等等),Activity会被销毁重建。
    eg:当我们在Manifest中配置
    android:configChanges="orientation"
    此时旋转屏幕Activity则不会重建,会回调onConfigurationinChanged方法。

    相关文章

      网友评论

          本文标题:Activity启动模式详解

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