Activity的四种启动模式launchMode

Activity的四种启动模式launchMode

这是一个永远不会过时的问题,记得刚入门的时候飞哥很详细得跟我说明四种不同启动模式的区别,当时我一边应承,一边在想为什么要分为这四种不同的启动模式?
后来面试的时候对方老大让我简单介绍一下这四种启动方式,我仅凭印象和理解对这些概念做了描述,当说到最后一种时我突然忘记了叫什么名来着?single?single啥?记得是重新开一个栈,singleStack?这tm就尴尬了。。。

好的,吸取这个教训,下面给自己好好整理一下。


1.什么是任务栈

(1)程序打开时就创建了一个任务栈, 用于存储当前程序的activity,所有的activity属于一个任务栈。
(2)一个任务栈包含了一个activity的集合, 去有序的选择哪一个activity和用户进行交互:只有在任务栈栈顶的activity才可以跟用户进行交互。
(3)任务栈可以移动到后台, 并且保留了每一个activity的状态. 并且有序的给用户列出它们的任务, 而且还不丢失它们状态信息。
(4)退出应用程序时:当把所有的任务栈中所有的activity清除出栈时,任务栈会被销毁,程序退出。

2.Activity为什么要用指定启动模式

任务栈的缺点:
(1)每开启一次页面都会在任务栈中添加一个Activity,而只有任务栈中的Activity全部清除出栈时,任务栈被销毁,程序才会退出,这样就造成了用,户体验差, 需要点击多次返回才可以把程序退出了。
(2)每开启一次页面都会在任务栈中添加一个Activity还会造成数据冗余, 重复数据太多, 会导致内存溢出的问题(OOM)。

当我们的App需要生成给其他App调用的Activity,例如浏览器应用,照相机应用,任务栈过深的时候,设计良好合适得启动模式可以避免一直按返回键也退不回想要的页面,因此我们需要引入启动模式。

3.四种启动模式的区别

四种启动方式分别为:standard,singleTop,singleTask,singleInstance。使用时需要在AndroidManifest.xml配置的Android:launchMode属性中配置,如果没有配置默认是standard。

1.standard:标准模式

每次通过这种模式启动Activity时,Android总会为启动的Activity创建一个新的实例,并将该Activity添加到当前Task栈中,这种模式不会创建新的Task,只是将新Activity添加到原有的Task 中。

盗图:
standard模式

2.singleTop:Task顶单例模式

如果在任务的栈顶正好存在该Activity的实例, 就重用该实例,否则就会创建新的实例并放入栈顶(即使栈中已经存在该Activity实例,只要不在栈顶,都会创建实例)。

singleTop

3.singleTask:Task内单例模式

如果在任务栈中存在该Activity实例,则不需要创建,只需要把此Activity放入栈顶,并把该Activity以上的Activity实例都pop出栈;否则重新创建实例置于栈顶。

singleTask

4.singleInstance:全局单单例模式

如果任务栈中不存在该Activity实例,系统先会创建一个全新的Task,接着创建一个Activity实例,然后将该目标Activity加入到新的Task栈顶;如果该Activity已经存在,无论在哪个Task栈中,系统将会把Activity所在的栈置于前台。
注意:采用singleInstance加载模式的Activity总是位于Task栈顶,并且Activity所在的Task栈只包含该Activity。

singleInstance

4.四种启动模式的区别应用场景

singleTop适合接收后台通知所启动的内容显示页面。例如,某个新闻客户端的新闻内容页面,如果收到10个新闻推送,每次都打开一个新闻内容页面是很烦人的。或者当我不小心点了一个推送两次或者因网络延迟得原因打开了两个页面,这是一个非常差的体验。

singleTask适合作为程序入口点。此启动模式和我们使用的浏览器工作原理类似,我们都知道在多个程序中访问浏览器时,如果当前浏览器没有打开,则打开浏览器,否则会在当前打开的浏览器中访问。此模式会节省大量的系统资源,因为他能保证要请求的Activity对象在当前的栈中只存在一个。

singleInstance适合需要与程序分离开的页面。例如闹铃提醒,将闹铃提醒与闹铃设置分离。singleInstance不要用于中间页面,如果用于中间页面,跳转会有问题,比如:A -> B (singleInstance) -> C,完全退出后,在此启动,首先打开的是B。

5.总结

温故而知新,可以为师矣。

盗图于Android入门:Activity四种启动模式
参考于彻底明白Activity启动模式-SingleTop、SingleTask、SingleInstance具体使用场景

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值