本文总结的是首先是几种启动模式,第二是Intent跳转Activity的时候的标志;
现在是A,B,C,D四个Activity组件;
可以使用adb命令进行栈的实际情况了解:adb shell dumpsys activity
Activity一共有以下四种launchMode:
1.standard
2.singleTop
3.singleTask
4.singleInstance
我们可以在AndroidManifest.xml配置<activity>的android:launchMode属性为以上四种之一即可。
<activity android:name="ActivityB" android:launchMode="standard"></activity>
standard
标准启动模式
我是standard,我无脑的新建Activity,不考虑task中有没有这个Activity组件;
ABC之间顺序跳转的情况是这样的:
singleTop
这个一般用在从Service组件或者Application实现类中进行跳转;
我是singleTop,要跳转到我了,先看看正在屏幕上显示的是不是我,是我就不新建实例了,直接用,不是我,就照standard的规则来吧;
除了跳转到当前显示的页面之后,跳转到不是当前显示的Activity组件,情况完全同standard启动模式;ABC之间跳转的情况还是这样的:
如果当前是
C
B
A
再从C跳转到C,或者从service组件,和Application实现类中跳转到C,栈的情况还是
C
B
A
如果C是standard,则情况是:C
C
B
A
从和标准启动模式相比较,可以看出这个区别;
singleTask
名字解释:single instance in task, 任务栈中只能有一个实例;现在A--B--C之间顺序跳转;设置C为singleTask;比如现在栈的情况是:
那么这个情况下我现在跳转回到设置为singleTask的C,栈内是这样的:
可以看出,跳到属性为singleTask的C,C粗暴的把在之前C的实例上面的A,B移出栈;
这说明了singleTask的C的自白是这样的:
我是singleTask,你们在栈内压住我的,等我即将被重新调回栈顶的时候,我不回,我要把你们弹出栈,我自然就成为栈顶;因为我是singleTask,就是single instance in task;
singleInstance
singleInstance就是说single task for instance,栈内只能有一个实例;设置C为singleInstance,
A--B的时候是这样的;
跳转到C的时候:
A--B---C
没错,新建了一个栈,然后把C放进去;
我是singleInstance,在这个任务的栈内,我就是只有一个,没有别人的实例在;跳转到哥了,哥新建一个任务,自己进栈;
至此,4种启动方式介绍结束;
本文来自于CSDN博客,转载请联系作者;
注明出处:http://blog.csdn.net/dreamintheworld/article/details/39693427#t0