Android activity 启动模式小结

Android 的启动模式两种控制方法:

1.可以通过清单文件控制,android:launchMode

2.通过intent.addFlags实现

两种启动方式的优先级是:代码优先,即第二种优先于第一种

一.通过清单文件控制的有四种启动模式:

1.standar 标准模式,启动多少就创建多少个activity实例

2.singleTop 栈顶复用模式,简单的说就是栈顶已经有了这个activity,再次启动这个activty的时候,系统不会为其创建新的实例。举个例子:A为standar,B为singleTop ,启动A后,再启动B,再启动B后,任务栈还是AB,此时再次启动A,再启动B,任务就是ABAB,这种启动方式只关心top是不是重复,不关心栈内会不会重复

3.singleTask 栈内复用模式,简单的说就是栈顶已经有了这个activity,再次启动这个activty的时候,系统不会为其创建新的实例,并且,再次启动的时候会把原来压在该activity上的activity清空。举个例子,A为standard,C为singTask,先启动A,再启动C,再启动A,再启动A,此时的任务栈是ACAA,然后再次启动C的时候,任务栈此时的样子是AC。(singleTask可以和taskAffinity 和allowTaskReparenting 一起使用指定改activity启动模式需要独立运行到指定名只taskAffinity,默认情况下,所有任务栈的名字为包名,此时singTask的启动模式为singleInstance,相对singleInstance,可以指定栈名,通过这种方式可以为app建立三个以上任务栈)

4.singleInstance 特殊的singleTask 除了有singleTask的特性外,加强了一点就是只能单独的运行在一个任务栈中。举个例子,A为standard,D为singleInstance,启动A,启动D,再启动A,现在前台的任务栈为AA,后台的任务栈为D,如果后退,应该AA退完,然后再来退D

使用场景:

1.standar :一般场景使用

2.singleTop:聊天对话场景

3.singleTask:首页

4.singleInstance:登录页面

二.通过intent addflags指定启动模式(这个摘抄《Android艺术开发探索》的)

1.Intent.FLAG_ACTIVITY_NEW_TASK:效果和上面的singleTask相同

2.Intent.FLAG_ACTIVITY_SINGLE_TOP:效果和上面的singleTop相同

3.Intent.FLAG_ACTIVITY_CLEAR_TOP:一般和Intent.FLAG_ACTIVITY_NEW_TASK配合使用,singleTask的效果,不过如果被启动的activity的launchMode为standar ,那么它自己和在它栈顶的都得清除,重新new一个实例放在栈顶

4.Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS:等同在xml中指定android:excludeFromRecents = "true",作用是不希望这个activity在历史的列表中(这个表示不懂,不过看到一个还不错的介绍 https://www.jianshu.com/p/2bdc16cba04f)

除了直接运行app知道这些启动模式的特性之外,还可以通过命令行的方式去查看当前的activity情况,命令为 adb shell dumpsys activity +(包名),包名可以加可以不加,个人觉得加上包名容易看一些

 

主要参考: 
《android开发艺术探索》 

你可能感兴趣的:(复习,启动模式,launchMode)