网上这四种加载模式说的比较含糊,而且繁杂,故本人通过试验加自己的理解力图用最简单明了的语言表述,整理如下:
这四种模式的主要作用是:当重复StartActivity的时候根据需要产生多个Activity或者只产生一个Activity。
在Activity的xml中android:launchMode="singleTask设置位置如下:
<activity android:name="ACtivityA"android:launchMode="singleTask"></activity>
模式一:standard
该模式是默认模式,最好理解,ActivityA多次StartActivity去启动ActivityB的时候总会产生ActivityB的新实例,即总会调用OnCreate方法。
模式二:singleTop
该模式指的是如果设置该属性,当Activity在栈顶(如ActivityA),ActivityB通过StartActivity启动ActivityA,
则ActivityA不会产生新实例,否则产生新实例。(如B设置该苏醒,A启动B后,B在栈顶,此时B启动B,不会产生新实例。如果此时B启动C,C在启动B,就会产生新实例(B已不在栈顶了))。
(个人理解栈就是放置Activity的容器,如A启动B,B启动C。则A在栈底,c在栈顶。这是指同一个栈)。
模式三:singleTask
设置该属性的Activity只能产生一个实例。如A设置该属性,A启动B(B为默认模式),B在启动A,则这个A还是原来的A,只从restart开始执行。
但B启动A后,B会销毁!因为B在栈顶,A在B下面,B启动A,而A又不会产生新实例,相当于按返回键一样,所以销毁。
模式四:singleInstance
设置该属性的Activity也只能产生一个实例,但会放在不同栈中。如B设置该属性,A启动B(B已与A不再同一栈中),B在启动C(因A,C为默认模式,所以C与A在同一栈中),而C按返回键,并不显示B界面,而是A界面。当A所在的栈完全销毁的时候才会显示B界面。