Activity的四种LaunchMode详解
Activity有四种LaunchMode,分别是: standard、singleTop 、singleTask、singleInstance。
standard:标准模式,也是系统默认的模式。每次启动一个activity都会创建一个新的实例,无论这个实例在任务栈中是否存在。被创建的实例activity生命周期符合标准情况,启动时有:onCreate,onStart,onResume。启动规则:谁启动这个activity,那么这个activity就运行在启动它的那个activity的任务栈中。
singleTop:栈顶复用模式。如果这个新启动的Activity如果已经位于任务栈栈顶,那么此activity就不需要被重新创建,同时它的onNewIntent()方法将会被调用,此时activity生命周期调用方法只有onResume();如果栈顶没有该activity实例,就算启动它的activity的任务栈中已经有了该实例,也要重新创建,创建方式和standard一样。
singleTask:栈内复用模式。如果启动activity A,系统首先会寻找是否存在A“想要”的任务栈。如果任务栈存在:则判断该任务栈中,A的实例是否已经存在,如果实例存在,则将A上的实例让它出栈,使它位于栈顶,如果A的实例不存在则创建A的实例。如果任务栈不存在,首先创建任务栈,然后再在该任务栈中创建该实例。
解释下“想要”:首先说一下 默认情况下,所有activity的所需任务栈名称和应用包名是相同的。但是我们可以为每个activity指定TaskAffinity属性,有了这个属性后,activity的所需的任务栈名称就又它决定。
singleInstance:单实例模型。此模型的activity只能单独的位于一个任务栈中,而且全局唯一。如果A是singleInstance,那么在A首次启动的时候系统会创建一个新的任务栈,然后A单独的位与该任务栈中。下次启动的时候不需要再创建,调用onNewIntent()方法即可。