42

Android启动模式-精华篇

 5 years ago
source link: https://tryenough.com/android-launch-mode?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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时,已经存在了一个实例,那么会把它所在的任务调度到前台,重用这个实例。

热度: 6


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK