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

本文深入解析了Android中Activity的四种启动模式:standard、singleTop、singleTask和singleInstance,详细阐述了每种模式下的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"/>1234567

默认模式为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
--------------------- 
作者:刘运召 
来源:CSDN 
原文:https://blog.csdn.net/Liu_yunzhao/article/details/78255461 
版权声明:本文为博主原创文章,转载请附上博文链接!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值