Activity的四种启动模式及使用场景

Activity的四种启动模式

standard、singleTop、singleTask、singleInstance

在AndroidManifest配置:

<activity android:name=".MainActivity" android:launchMode="standard"/>

<activity android:name=".MainActivity" android:launchMode="singleTop"/>

<activity android:name=".MainActivity" android:launchMode="singleTask"/>

<activity android:name=".MainActivity" android:launchMode="singleInstance"/>

默认模式为standard标准模式,即多次启动同一个Activity时,系统会创建多个实例,并按照先进后出的原则一一放到任务栈中。
当我们按back键时,就一一从任务栈中把Activity移除。

standard 默认标准模式

默认Activity为standard标准模式,多次启动同一个Activity时,系统会创建多个实例,在这种模式下,
谁启动了该模式的Activity,该Activity就属于启动它的Activity的任务栈中

如进栈:
StandardActivity->StandardActivity->StandardActivity
出栈:
StandardActivity->StandardActivity->StandardActivity
每次都会创建一个新实例,但都在同一个任务栈中,点击back键退出时,按先进后出原则出栈。

singleTop栈顶复用模式

  • 当栈没有SingleTopActivity实例时,和StandardActivity一样,生命周期的方法都走
  • 当栈中有SingleTopActivity实例并位于栈顶时,再次startActivity,不会创建新实例,而是复用栈顶SingleTopActivity实例,并只会回调onNewIntent方法,并接受Intent对象传递
  • 当栈中有SingleTopActivity实例,但不位于栈顶时,再次startActivity,和StandardActivity一样,生命周期的方法都走

如启动方式1:
StandardActivity->SingleTopActivity->SingleTopActivity->SingleTopActivity
出栈:
SingleTopActivity->StandardActivity
因栈顶元素本就是SingleTopActivity,所以会复用,而不会再次创建SingleTopActivity实例

如进栈:2:
StandardActivity->SingleTopActivity->StandardActivity->SingleTopActivity
出栈:
SingleTopActivity->StandardActivity->SingleTopActivity->StandardActivity

SingleTask栈内复用模式

  • 如果栈不存在,首次启动SingleTaskActivity时,会走Activity的生命周期,会创建新的task,并把Activity压入到栈,后续再次启动SingleTaskActivity时:
    • 如果SingleTaskActivity位于栈顶不会创建多个实例,而是复用此实例,并只会回调onNewIntent方法,并接受Intent对象传递
    • 如果SingleTaskActivity不位于栈顶则将它上面的Activity实例都清出栈,也不会创建多个实例,而是复用此实例,并只会回调onNewIntent方法,并接受Intent对象传递
  • 如果栈存在,首次启动SingleTaskActivity时,会走Activity的生命周期,并把SingleTaskActivity实例压入到此栈,后续再次启动SingleTaskActivity时:
    • 如果SingleTaskActivity位于栈顶不会创建多个实例,而是复用此实例,并只会回调onNewIntent方法,并接受Intent对象传递
    • 如果SingleTaskActivity不位于栈顶则将它上面的Activity实例都清出栈,也不会创建多个实例,而是复用此实例,并只会回调onNewIntent方法,并接受Intent对象传递

如启动方式1:
StandardActivity->SingleTaskActivity->SingleTaskActivity->SingleTaskActivity
出栈:
SingleTaskActivity->StandardActivity
因最后又启动了SingleTaskActivity实例,则会复用之前创建的实例,并把上面的元素清出栈

如启动方式2:
StandardActivity->SingleTaskActivity->SingleTopActivity->SingleTaskActivity
出栈:
SingleTaskActivity->StandardActivity
如启动方式3:
SingleTaskActivity->StandardActivity->SingleTopActivity->SingleTaskActivity
出栈:
SingleTaskActivity

SingleInstance全局唯一模式

StandardActivity SingleTopActivity SingleTaskActivity这三种启动模式一般都是在一个栈中进进出出,而SingleInstanceActivity类比较牛,就是它会单独占用一个栈,具有全局唯一性,整个手机系统就这一份实例,如果存在则复用,如果不存在则新建。

手机back键是按栈的先进后出顺序进行出栈的,但SingleInstanceActivity是一个单独的栈,所以出栈顺序需要设计好。

如启动方:1:
StandardActivity->SingleTopActivity->SingleInstanceActivity->SingleTaskActivity
出栈:
SingleTaskActivity->SingleTopActivity->StandardActivity->SingleInstanceActivity
因为StandardActivity SingleTopActivity SingleTaskActivity三个实例在一个栈中,需要全部出完,才会轮到SingleInstanceActivity所在的栈中元素出栈

如启动方式2:
StandardActivity->SingleTopActivity->SingleTaskActivity->SingleInstanceActivity
出栈:
SingleInstanceActivity->SingleTaskActivity->SingleTopActivity->StandardActivity

如启动方式3:
SingleTaskActivity->SingleTopActivity->SingleInstanceActivity->SingleTaskActivity
出栈:
SingleTaskActivity->SingleInstanceActivity

你可能感兴趣的:(普通)