Android启动模式-精华篇

Activity的四种启动模式如下:

**standard、singleTop、singleTask、singleInstance **

standard-默认模式

1.谁启动了该模式的Activity,该Activity就属于启动它的Activity的任务栈中
2.每次启动一个Activity都会重写创建一个新的实例,不管这个实例存不存在

singleTop-栈顶复用模式

1.当前栈中已有该Activity的实例并且该实例位于栈顶时,不会新建实例,而是复用栈顶的实例,并且会将Intent对象传入,回调onNewIntent方法
2.当前栈中已有该Activity的实例但是该实例不在栈顶时,其行为和standard启动模式一样,依然会创建一个新的实例

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中。

可以使用

使用命令adb shell dumpsys activity activities可进行查看栈中的内容

singleInstance-全局唯一模式

1.这种模式下的Activity会单独占用一个Task栈,具有全局唯一性
2.以singleInstance模式启动的Activity在整个系统中是单例的,如果在启动这样的Activiyt时,已经存在了一个实例,那么会把它所在的任务调度到前台,重用这个实例。

发表评论

关闭菜单