Activity启动模式
2018-08-27 本文已影响0人
waiwaaa
4种启动模式:
-
standard:标准模式,系统默认为此模式。每次启动都会新建
Activity
。新启动的Activity
会进入启动它的Activity的栈。 -
singleTop:栈顶复用模式。如果新的
Activity
已位于任务栈的栈顶,则Activity
不会重新创建,onNewIntent
方法会调用,onCreate
,onStart
不会调用。如果新Activity
存在但不在栈顶,则会新建Activity
。 -
singleTask:栈内复用模式。只要Activity在一个栈中存在,都不会重建,同singleTop一样会调用
onNewIntent
, 默认有clearTop效果。如果指定TaskAffinity
,会先查找栈,不存在要重新创建新栈再加入。 - singleInstance:单例模式。除具有singleTask模式特式外,具有此模式的Activity只能单独位于一个任务栈中。
c
Activity启动所需的任务栈,默认下名称为应用的包名。 主要与singleTask启动模式或者allowTaskReparenting
属性配合使用。
与singleTask配合使用
它是具有该模式的Activity
的目前任务栈名字,待启动的Activity
会运行在名字和TaskAffinity
相同的任务栈中。
与allowTaskReparenting结合
如果 应用A启动应用B的Activity
C, allowTaskReparenting
设置为true
。如果再次启动应用B,则Activity C会从应用A转移到应用B,会直接显于ActivityC
常用Flags
有的Flags可以设定Activity的启动模式,如
- FLAG_ACTIVITY_NEW_TASK 指定singleTask启动模式
- FLAG_ACTIVITY_ACTIVITY_SINGLE_TOP指定singleTop启动模式
- FLAG_ACTIVITY_CLEAR_TOP 在同一个栈中,位于它上面的activity都要出栈。通常与singleTask一起使用; 如果与standard一起出现,则会它连同它之上的都会出栈,然后再创建新的并放入栈顶
查看任务栈
adb shell dumpsys activity
更多adb命令请点击这里