前几天有同学说到android中的四种启动模式,然后看了一下,做了一下总结:
四种启动模式分别是 standard singleTop singleTask singleInstance.
其实在程序中有一个应用栈,用来保存Activity,比如Activity1 ----->Activity2----->Activity3 ,他们在栈里的保存形式如下:
下面呢,就分别说一下这四种启动模式:
stardard: 默认的启动模式,每调用一次创建一个实例放入任务栈中。例如,现在已经有Activity1、Activity2两个实例,再次调用Activity2,其应用栈变化过程如下:
singleTop: 要调用的 Activity 位于当前栈的栈顶,则不会创建新的实例,调用 onNewIntent() 方法。
否则,创建新的实例,并放在栈顶。即允许多个实例,但是不允许相同的 Activity 重叠。下面是具体的应用栈的变化:
(调用的位于栈顶) (调用的未位于栈顶,注意这里调用的Activity1 )
singleTask:
如果要激活的Activity在应用栈里已经有了,将重用该Activity,即调用onNewIntent() 方法。在应用栈中则将该Activity放在栈顶,因此该Activity之前的Activity全部从应 用栈弹出。
如果没有,则创建该Activity的新实例。即只允许有一个实例。
singleInstance: 只有一个实例。如果应用1的栈中创建了MainActivity实例,如果应用2的栈中也要激活MainActivity,则不需要创建,两应用共享该Acitvity的实例。
其次,再给大家说一下Activity启动模式设置:
<activity android:name=".MainActivity" android:launchMode="standard" /> 自我感觉对singleInstance的理解还不是很到位,如果有不足之处,请多多指教。