Android启动模式-精华篇
支持原文:http://tryenough.com/android-launch-mode
Activity的四种启动模式如下:
**standard、singleTop、singleTask、singleInstance **
standard-默认模式
1.谁启动了该模式的Activity,该Activity就属于启动它的Activity的任务栈中
2.每次启动一个Activity都会重写创建一个新的实例,不管这个实例存不存在
singleTop-栈顶复用模式
1.当前栈中已有该Activity的实例并且该实例位于栈顶时,不会新建实例,而是复用栈顶的实例,并且会将Intent对象传入,回调onNewIntent方法
2.当前栈中已有该Activity的实例但是该实例不在栈顶时,其行为和standard启动模式一样,依然会创建一个新的实例
支持原文:http://tryenough.com/android-launch-mode
taskAffinity属性
1.taskAffinity可以指定activity启动的任务栈
2.taskAffinity属性不对standard和singleTop模式有任何影响,即时你指定了该属性为其他不同的值,这两种启动模式下不会创建新的task
设置代码如下:
<activity android:name=".ActivitySingleTop" android:launchMode="singleTop" android:taskAffinity="com.castiel.demo.singletop"/>
singleTask-栈内复用模式
1.栈中存在这个Activity的实例就会复用这个Activity,不管它是否位于栈顶,复用时,会将它上面的Activity全部出栈,并且会回调该实例的onNewIntent方法。
2.taskAffinity属性可以指定其任务栈,如果指定也只是会在指定的栈中创建,如果不同的app指定相同的栈也是可以的,不同的app指定相同的栈启动同一个activity的话,会被启动到了同一个task中。
支持原文:http://tryenough.com/android-launch-mode
可以使用
使用命令adb shell dumpsys activity activities可进行查看栈中的内容
支持原文:http://tryenough.com/android-launch-mode
singleInstance-全局唯一模式
1.这种模式下的Activity会单独占用一个Task栈,具有全局唯一性
2.以singleInstance模式启动的Activity在整个系统中是单例的,如果在启动这样的Activiyt时,已经存在了一个实例,那么会把它所在的任务调度到前台,重用这个实例。