美文网首页
Activity的启动模式

Activity的启动模式

作者: leeiidesu | 来源:发表于2017-07-13 16:47 被阅读0次

    启动模式

    Activity共有四种启动模式,分别是

    • standard

    Activity的默认启动模式,每次启动都会新创建这个Activity的实例。一个任务栈里面可以有多个该Activity的实例。
    示例:
    操作:连续启动4个standard模式的Activity,之后连续4次点击back键

    StandardActivity: onCreate : from  -> null
    StandardActivity: onCreate : from  -> StandardActivity
    StandardActivity: onCreate : from  -> StandardActivity
    StandardActivity: onCreate : from  -> StandardActivity
    StandardActivity: onDestroy
    StandardActivity: onDestroy
    StandardActivity: onDestroy
    StandardActivity: onDestroy
    

    启动多少次,就有多少个实例被创建。

    • singleTop

    栈顶复用模式 当启动该Activity的时候,在任务栈中存在该Activity的实例,并且位于栈顶的时候,并不会重新创建实例,而是复用当前实例,并回调其 onNewIntent(Intent intent) 方法。

    • 示例1

    操作:先打开一个默认Activity,再连续启动三次singleTop模式的Activity,并点击4次back键

      StandardActivity: onCreate : from  -> null
      SingleTopActivity: onCreate : from  -> StandardActivity
      SingleTopActivity: onNewIntent : from  -> SingleTopActivity
      SingleTopActivity: onNewIntent : from  -> SingleTopActivity
      SingleTopActivity: onDestroy
      StandardActivity: onDestroy
    

    可以看到后两次启动singleTop的时候并没有创建新的Activity,而是回调了它的onNewIntent方法。

    • 示例2

    操作:先启动standard,再启动2次singleTop,再启动一个standard,再启动2次singleTop,然后back退出

    StandardActivity: onCreate : from  -> null
    SingleTopActivity: onCreate : from  -> StandardActivity
    SingleTopActivity: onNewIntent : from  -> SingleTopActivity
    StandardActivity: onCreate : from  -> SingleTopActivity
    SingleTopActivity: onCreate : from  -> StandardActivity
    SingleTopActivity: onNewIntent : from  -> SingleTopActivity
    SingleTopActivity: onDestroy
    StandardActivity: onDestroy
    SingleTopActivity: onDestroy
    StandardActivity: onDestroy
    

    可以看到当singleTop不在栈顶的时候,如之后启动的StandardActivity后,再次启动它的时候,又会重新创建实例。

    • singleTask

    栈内复用模式 当启动该Activity的时候,如果栈中已经存在该Activity的实例,会复用该实例,回调其 onNewIntent(Intent intent) 方法,并且会清空在该栈中位于这个示例之上的其他Activity实例。

    • 示例
      操作:先启动standard,再启动2次singleTask,再启动2次standard,然后启动singleTask,最后back退出
    StandardActivity: onCreate : from  -> null
    SingleTaskActivity: onCreate : from  -> StandardActivity
    SingleTaskActivity: onNewIntent : from  -> SingleTaskActivity
    StandardActivity: onCreate : from  -> SingleTaskActivity
    StandardActivity: onCreate : from  -> StandardActivity
    StandardActivity: onDestroy
    SingleTaskActivity: onNewIntent : from  -> StandardActivity
    StandardActivity: onDestroy      
    SingleTaskActivity: onDestroy      //点击back
    StandardActivity: onDestroy      //点击back
    

    当singTask的实例不在栈顶的时候,再次启动依然不会创建实例,而是clearTop(销毁其他在之上的Activity),然后再回调onNewIntent

    • singleInstance

    单实例模式 当启动该Activity的时候会重新创建一个任务栈,并将该实例存入,这个栈也只会存这个实例。该模式可以看作是一个严格的singleTask模式,所以这种模式除了不会销毁其他Activity外,回调和singleTask一样。

    但这种模式还有一个在原理上不奇特,在效果上很奇特的地方,就是当这个Activity的任务栈不在最前时(就是说这个Activity不在当前),当点击back键时,会优先退出完其他Activity的之后再退出该Activity。
    
    • 效果如下
    //交替启动standard模式和singleInstance模式的Activity
    StandardActivity: onCreate : from  -> null
    SingleInstanceActivity: onCreate : from  -> StandardActivity
    StandardActivity: onCreate : from  -> SingleInstanceActivity
    SingleInstanceActivity: onNewIntent : from  -> StandardActivity
    StandardActivity: onCreate : from  -> SingleInstanceActivity
    SingleInstanceActivity: onNewIntent : from  -> StandardActivity
    StandardActivity: onCreate : from  -> SingleInstanceActivity
    SingleInstanceActivity: onNewIntent : from  -> StandardActivity
    StandardActivity: onCreate : from  -> SingleInstanceActivity
    //下面是点击了back键
    StandardActivity: onDestroy
    StandardActivity: onDestroy
    StandardActivity: onDestroy
    StandardActivity: onDestroy
    StandardActivity: onDestroy
    SingleInstanceActivity: onDestroy
    

    总结来说就是,back键是退出一个栈的栈顶的实例,所以原理并不奇特。栈的退出顺序也是后进先退,就是说当你有两个或两个以上的singleInstance实例启动时,栈的退出也是退完一个栈之后再退你后创建的栈。

    相关文章

      网友评论

          本文标题:Activity的启动模式

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