Activity 的启动模式 launchmode 探索
Activity 的 launchmode
应该算是基础中的基础了,分为四种:standard
,singleTop
,singleTask
,singleInstance
。
但是在初学阶段一直没有很好的理解其中的区别,现在回过头来结合代码打印的日志总结一下,记录下来。
startActivity(intent)
,都会在任务栈实例化一个新的 Activity 。startActivity(intent)
,如果任务栈顶没有实例,就会实例化一个新的 activity 对象;onNewIntent(intent)
方法。AndroidManifest.xml
中没有定义 taskAffinity
属性:startActivity(intent)
,如果当前任务栈没有实例,就会实例化一个新的 activity 对象;onNewIntent(intent)
方法,同时会清空栈内其之上的其他activity实例singleTask
模式的 , 从 D 跳到 B,则栈元素变成 A B。AndroidManifest.xml
中定义了 taskAffinity
属性:startActivity(intent)
,如果该任务栈没有创建过,会创建一个新的任务栈;onNewIntent(intent)
方法,同时会清空新栈内其之上的其他activity实例。singleTask
模式的 ,从 D 跳到 B,则栈元素变成 A B。startActivity(intent)
,如果新的任务栈不存在,则会创建一个新的任务栈并例化一个新的 activity 对象;onNewIntent(intent)
方法。singleInstance
模式的 Activity 中,则又会创建一个新的任务栈;singleInstance
模式的 Activity 都会拥有一个单独的任务栈,且任务栈中只有自己一个实例。