Activity四种启动模式:
(一)、基本描述
standard:标准模式
:如果在mainfest中不设置就默认standard;standard就是新建一个Activity就在栈中新建一个activity实例;singleTop:栈顶复用模式
:与standard相比栈顶复用可以有效减少activity重复创建对资源的消耗,但是这要根据具体情况而定,不能一概而论;singleTask:栈内单例模式
,栈内只有一个activity实例,栈内已存activity实例,在其他activity中start这个activity,Android直接把这个实例上面其他activity实例踢出栈GC掉;singleInstance :堆内单例
:整个手机操作系统里面只有一个实例存在就是内存单例;
(二)、场景设置
Activity的启动模式的应用的设置是和它的开发场景有关系的,在APP中打开新的Activity的基本上分为两种情况:
目标Activity是本应用中的Activity
,即它的启动模式是可以直接在fanifest中配置或者默认为standard,任务栈也可以自己随意设置;目标Activity是第三方APP中的Activity
,这个时候就需要先考虑打开新Activity的是和自己APP放在同一任务栈中还是新的task中【这个是很重要的因为在Android的机制中:同一个任务栈中的activity的生命周期是和这个task相关联的[具体实例见下文]】,然后考虑Activity的启动模式; 所以Android提供了优先级更高的设置方式在Intent.setFlags(int flags),通过这setFlags就可以为打开第三方的APP中Activity设置任务栈和启动模式了,具体设置就自己去看源码了。
二、Activity四种启动模式常见使用场景:
LauchMode | Instance |
---|---|
standard | mainfest中没有配置就默认标准模式 |
singleTop | 登录页面、WXPayEntryActivity、WXEntryActivity 、推送通知栏 |
singleTask | 程序模块逻辑入口:主页面(Fragment的containerActivity)、WebView页面、扫一扫页面 |
singleInstance | 系统Launcher、锁屏键、来电显示等系统应用 |