android中的四种启动模式

前几天有同学说到android中的四种启动模式,然后看了一下,做了一下总结:

四种启动模式分别是     standard    singleTop   singleTask    singleInstance.

其实在程序中有一个应用栈,用来保存Activity,比如Activity1 ----->Activity2----->Activity3  ,他们在栈里的保存形式如下:

android中的四种启动模式_第1张图片

下面呢,就分别说一下这四种启动模式:

stardard: 默认的启动模式,每调用一次创建一个实例放入任务栈中。例如,现在已经有Activity1、Activity2两个实例,再次调用Activity2,其应用栈变化过程如下:

android中的四种启动模式_第2张图片

singleTop:  要调用的 Activity 位于当前栈的栈顶,则不会创建新的实例,调用 onNewIntent() 方法。

                    否则,创建新的实例,并放在栈顶。即允许多个实例,但是不允许相同的 Activity 重叠。下面是具体的应用栈的变化:

android中的四种启动模式_第3张图片             android中的四种启动模式_第4张图片     

              (调用的位于栈顶)                                                                                                       (调用的未位于栈顶,注意这里调用的Activity1 )

singleTask:

如果要激活的Activity在应用栈里已经有了,将重用该Activity,即调用onNewIntent() 方法。在应用栈中则将该Activity放在栈顶,因此该Activity之前的Activity全部从应 用栈弹出。

如果没有,则创建该Activity的新实例。即只允许有一个实例。

android中的四种启动模式_第5张图片

singleInstance:  只有一个实例。如果应用1的栈中创建了MainActivity实例,如果应用2的栈中也要激活MainActivity,则不需要创建,两应用共享该Acitvity的实例。

android中的四种启动模式_第6张图片


其次,再给大家说一下Activity启动模式设置:

 <activity android:name=".MainActivity" android:launchMode="standard" />

自我感觉对singleInstance的理解还不是很到位,如果有不足之处,请多多指教。


  


    


你可能感兴趣的:(android)