android launchMode

写在最前面的话,前几天一个前辈问我启动模式的问题,工作这么长时间,说实话,经常用的也就 singleTop singleTask ,让我遇到具体的问题了呢,我知道该使用哪种启动模式解决,有时候真说,还说不出来。结果就悲剧了,挺尴尬的,所以决定写篇文章结合自己的实际操作来细细说来。

  • Standard模式(默认)

这个模式我就不多说了,系统默认的启动模式,也没什么特别的地方,每次启动一个Activity 都会创建一个实例。

我们重点说下 singleTop singleTask

  • SingleTop
    字面上的意思呢就是:如果要在当前页面启动一个的Activity ,系统首先会判断这个Activity是不是位于栈顶,如果刚好是,那么系统就不会重新创建Activity,反之则会重新创建Activity的实例,下面我们来模拟这样一个场景:

有三个Activity 分别是 A B C 启动顺序为:A→B→C 把A的启动模式修改为SingleTop 那么再次启动A ,栈里的顺序是什么样的?

![Upload notify5.gif failed. Please try again.]

首先栈里的初始信息肯定是这样的:

Paste_Image.png

如果我们再次启动A ,我们看打印信息:

android launchMode_第1张图片
Paste_Image.png

从打印的日志可以看出A是重新又在栈里重新创建了,因为我们前面说过singleTop模式会判断A是否在栈顶,如果在就重新启动,不在就重新创建,那么现在我们把C改为singleTop,然后在C页面重新C,我们看打印结果:

android launchMode_第2张图片
notify5.gif
android launchMode_第3张图片
Paste_Image.png

果不其然,这个C不会再重新创建的,因为C此时在栈顶,直接就利用C,不会重新创建。经过我亲自实验,大家应该就清楚了,这种启动模式一般能解决什么问题呢,比如:当我们快速点击button跳转界面的时候,可能会同时启动两个相同的 Activity ,如果你把启动模式修改singleTop 就不会出现两个一样的。

  • SingleTask
    简单的来讲呢,启动模式为此种的 Activity ,系统也是会首先判断是否位于栈顶,没有位于栈顶,如果在栈里已经存在,但是并没有在栈顶,则会把他之上的Activity全部清除掉,使自己位于栈顶,还是上面的A→B→C,到C页面后重新打开A,A 是singleTask ,我们来看下打印信息:
android launchMode_第4张图片
Paste_Image.png

当重新在C界面跳入A页面的时候,会发现,B,C出栈了,使A位于栈顶。

  • singleInstance
    这个我在开发中几乎没有用到过,可以用一张图来说明它的任务栈情况,我们设定B为singleInstance,如下图所示:
Paste_Image.png

这下可明白多了,你有没有觉着呢?哈哈哈哈哈哈哈哈哈哈哈哈......

你可能感兴趣的:(android launchMode)