Android Activity四种启动模式比较:standard,singleTop,singleTask,singleInstance

在Android中,Activity有4种启动模式,可以通过在注册文件中对Activity增加LanchMode设置该属性.下面说说这4个启动模式的区别.

首先,standard模式最简单,系统默认的就是该模式.这种模式情况下,我们调用一次startActivity(Activity activity),就发创建一个Activity的实例,并将其放入当前栈顶.这种情况就没什么好说的了.

SingleTop呢,就是在standard模式上的一种改变.假设activityA属于TestAcitvity的实例.那么我们假设:现在ActivityA处于栈顶,这种情况下我们调用startActivity()方法启动一个TestActivity.这个时候,系统就不会去重新创建一个TestAcitivity的实例.而是重新使用acitivityA这个实例.也就是说栈中Actiivity的个数不会改变.如果我们的ActivityA不处于栈顶,栈顶是不属于TestActivity的实例.这个时候,系统就和standard模式一样,会再去创建一个TestActivity的实例,并将其压入栈中.

SingleTask的情况,就是在SingleTop的模式上再次优化.它做出的改变就是不管TestActivity是处于当前栈顶,只要当前栈中有它的实例,我们调用startActivity()方法启动一个TestActivity,这都不会去重建实例.它只会重用已有实例.假如,当前栈没有TestActivity的实例的时候,它就会重新建个栈,然后建立一个TestActivity的实例.这个栈中允许有非TestActivity的实例存在的.

SingleInstance这种模式它与SingleTask比较就会很霸道了.当我们调用startActivity()启动TestActivity的实例的时候,它会新建一个栈去存放TestActivity的实例,并且新建的栈中,它不允许存在其它非TestAcitivty的实例存在,也就是说,新建的栈中有且只有一个对象.注意:假设我们在启动TestActivity的实例的时候,已经有一个这样的栈存在的时候,它就不会去新建栈了,它会去重用那个栈的实例.也就是说呢,当我们设置了SingleInstance这种模式的时候,整个系统都只会有一个实例存在,而且,它位于自己特有的栈中.


特别注意一点:如果我们调用startActivityForResult()那启动设置了SingleTask或者SingleInstance的Activity时,这个时候我们是收不到返回的结果的.所有,如果我们需要startActivityForResult()获取结果,那么我们就不能设置SingleTask或者SingleInstance.因为我们设置了SingleTask或者SingleInstance时,可能我们要启动的Activity和当前Activity并不处于同一个栈当中.

猜你喜欢

转载自blog.csdn.net/zxb3121999/article/details/45307405