Activity的四种启动模式的自白

来源:互联网 发布:yy音效软件 编辑:程序博客网 时间:2024/06/06 14:28
一直都在使用Activity,却很少去总结Activity的一些基本知识,现在就重新认识一下Activity组件的基本知识;
本文总结的是首先是几种启动模式,第二是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之间跳转的情况还是这样的:


因为都没有跳转到当前视窗中正在显示的Activity组件;
如果当前是
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



0 0
原创粉丝点击