launcherMode
Activity如何被启动呢?Intent对象中与Activity启动相关的标志(FLAG_ACTIVITY_*)有四个。它们分别是:
"standard
" "singleTop
" "singleTask
" "singleInstance
"
默认的启动模式是“standard”
四个模式主要分成两组:第一组是 "standard
" 和"singleTop
" ,"singleTask
" 和"singleInstance
"是另外一组。Activity以 "standard
" 和"singleTop
" 这两种模式启动时,可以被实例化多次。其实例可以属于任何Task中,并且可以位于Task的任意位置。通常情况下,它们通过调用startActivity()启动加入到Task中,除非Intent对象中包含了“FLAG_ACTIVITY_NEW_TASK ”的flag,在这种情况下它将进入到不同的Task中。
相比之下, "singleTask
" 和"singleInstance
"模式启动的Activity只能开始另一个Task,并且它们总是属于这个Task的Root Activity。此外,设备在一段时间内只维持一个该Activity的实例。只有一个这样的Task。
"standard
" 和"singleTop
"之间只有一个地方不同:对于"standard
"模式的Activity,每次有一个Intent启动时,都会生成新的Activity实例,而对于"singleTop
"模式启动的Activity来说,如果Activity实例在目标Task的顶部,该Activity被Intent启动时不会产生新的实例(会调用oneNewIntent()),其它情况下,如果Activity在目标Task中但是不在目标Task的顶部 或是 Activity在一个Task的顶部,但是不在目标Task中。它仍会创建一个新实例,进入到目标Task的顶部。
"singleTask
" 和"singleInstance
"之间也是只有一个地方不同:以 "singleTask
"模式开始的Activity,允许其它的Activity加入到它所到的Task,它始终是这个Task的Root Activity,其它能进入到这个Task的Activity的启动模式一定是 "singleTask
" 和"singleInstance
"这两种模式。"singleInstance
"启动的Activity也会开始一个Task,但是它不允话其它的Activity进入到它所在的Task,它是此Task的唯一的Activity同样也是Root Activity。
1.standard
默认启动方式。系统总是在目标Task中创建一个新的Activity实例。
2.singleTop
如果在目标Task的顶部已存在Activity实例,系统将通过该实例调用onNewIntent()方法,而不创建新的Activity实例。
3.singleTask
系统创建新的Activity实例,开启新的Task,并将Activity的实例做为新Task的根Activity。但是如果Activity的实例已经存在,系统会通过该实例调用onNewIntent()方法,而不是创建一个新的实例。
4.singleInstance
同“singleTask”一样,但是系统不会将其它Activity的实例放入到拥有该Activity实例的Task,该Activity实例将独占一个Task