Android:史上最生动形象的解析andriod activity的四种启动模式(standard, singletop,singletask,singleinstance)

套用连连看规则

玩过连连看吗?回顾下连连看的规则:

将相同花色的两个方块用三根以内的直线连在一起就可以消除。

为了有效管理activity,google在玩过连连看后,把该规则适当改进也套用到activity上了。下面我们就来具体试玩一下吧。

Activity的四种启动模式

模式一:standard

规则:叠放,不消除

在这里插入图片描述
速记成语:后来居上。

模式二:singletop

规则:叠放,相邻相同则消除,但保留并刷新下面的一个。

在这里插入图片描述
该规则下,你无法拼出“笔笔”,“果果”。
却可以拼出:“pen-pineapple-apple-pen”

应用举例:浏览器(Browser)的书签Activity(BrowserBookmarkPage)
配置成singleTop的Activity,不再会构造新的实例加入到Task栈中,而是将新来的Intent发送到栈顶Activity中,栈顶的Activity可以通过重载onNewIntent来处理新的Intent(对应图例中的刷新动作)

速记成语:形单影只

模式三:singletask

规则:叠放,任意间隔出现相同则消除区间内所有,但保留并刷新最下面的一个。

在这里插入图片描述
该模式你无法拼出“pen-pineapple-apple-pen”!

标志为singleTask的Activity,最多仅有一个实例存在,并且,位于以它为根的Task中。所有对该Activity的请求,都会跳到该Activity的Task中展开进行。

适用范围:构造成本很大,但切换成本较小的Activity
举例:浏览器应用的主Activity(名为Browser…)

速记成语:举世无双

模式四:singleinstance

规则:横放,不叠加,不重复

在这里插入图片描述
速记成语:各行其是

你还需要知道这些

1.“相同”的含义与taskAffinity属性

所谓“相同”,不仅指activity的名字相同,还包括它的taskAffinity属性。
Note:每个Activity都有taskAffinity属性,这个属性指出了它希望进入的Task。如果一个Activity没有显式的指明该 Activity的taskAffinity,那么它的这个属性就等于Application指明的taskAffinity,如果 Application也没有指明,那么该taskAffinity的值就等于包名。

2.“消除”的含义

所谓“消除”,本质上是出栈的动作。
配置成singleTop的Activity,不再会构造新的实例加入到Task栈中,而是将新来的Intent发送到栈顶Activity中,栈顶的Activity可以通过重载onNewIntent来处理新的Intent

3. 注意:栈顶的重复activity并没有创建出来。而图例中为了形象的表达,将重复的activity表现出来了。

本文为原创文章。可尽情点赞,留言和讨论。

发布了19 篇原创文章 · 获赞 8 · 访问量 2030

猜你喜欢

转载自blog.csdn.net/GentelmanTsao/article/details/103275485