申明下:本文中所看到的图片部分来自参考blog
http://blog.csdn.net/biezhihua/article/details/44230603
LaunchMode
standard
默认模式,允许多实例
singleTop
相比于standard,有新的启动请求时,只有在目标activity处于当前栈顶时,才会调用onNewIntent()而不创建新实例,其他情况都和standard一致
singleTask
(这段摘自老罗的博客)设置了”singleTask”启动模式的Activity,它在启动的时候,会先在系统中查找属性值affinity等于它的属性值taskAffinity的任务存在;如果存在这样的任务,它就会在这个任务中启动,否则就会在新任务中启动。
因此,如果我们想要设置了”singleTask”启动模式的Activity在新的任务中启动,就要为它设置一个独立的taskAffinity属性值。
如果设置了”singleTask”启动模式的Activity不是在新的任务中启动时,它会在已有的任务中查看是否已经存在相应的Activity实例,如果存在,就会把位于这个Activity实例上面的Activity全部结束掉,即最终这个Activity实例会位于任务的堆栈顶端中。
singleInstance
和singleTask相比,不同点在于singleInstance activity所在的task只会有这一个activity
返回导航:singleTask和singleInstance启动的activity,尽管可能不在同一个task,但是仍然会回到原来的activity;但是singleTask可能会存在back stack“拼接”的情况
standard
singleTop
singleTask
情况1: a,b在同一个Application
情况2:a,b不在同一个Application中,或b 设置了TaskAffinity
singleInstance
总结
摘自http://blog.piasy.com/2016/03/19/Android-Task-And-Back-Stack/?utm_source=tuicool&utm_medium=referral
同一task内的activity可以是来自不同进程的activity
栈内的activity不会重新排序,只能push或者pop
standard模式允许多实例,可以在不同的task
singleTask的activity只会存在一个实例
singleTask的activity如果设置了独立的taskAffinity属性值,启动时就会在新的task中,否则会在想要的task中
singleTask的activity启动时,它会在目标task(新的task或者已有task)中查看是否已经存在相应的activity实例,如果存在,就会把位于这个activity实例上面的activity全部销毁(pop, destroy)掉,即最终这个activity实例会位于任务的堆栈顶端中
参考:
http://blog.piasy.com/2016/03/19/Android-Task-And-Back-Stack/?utm_source=tuicool&utm_medium=referral