大家好,又见面了,我是你们的朋友全栈君。
最近有小伙伴询问
Activity
的启动模式是使用singleTask
好还是singleTop
好,在两种模式中纠结,所以今天就简单讲解一下两种模式的使用场景!
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
与singleTop
一般都是为了保证Activity在任务栈中的唯一性使用singleTop
模式的Activity在栈顶时只会在Task中存在一个实例,所以可以在以下场景中使用:
总之,singleTop
比较适用于childActivity(非主架构Activity,例如MainActivity)
所以假如有人问如何快速关闭100个Activity,只要给跳转的Activity设置singleTask即可
)singleTask
,并不会创建一个新的TasksingleTask
的Activity如果设置了独立的taskAffinity
属性值,启动时就会在新的Task中,否则会在已有Task中所以基于以上特性,比较适合主架构Activity(例MainActivity)设置为singleTask
,或者一些经常使用,但是关闭和跳转不规律的Activity
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/124903.html原文链接:https://javaforall.cn