安卓 Activity 的四种 launchMode

作者:vkvi 来源:千一网络(原创) 日期:2018-7-19

这个 launchMode 是在 AndroidManifest.xml 中 activity 中配置的。

约定

假设本文用 A -> B,表示 Activity A 中用 startActivity 启动 Activity B。

standard

默认值。

A -> B -> C -> C -> B,此时系统中有五个 Activity,其中 B、C 均有两个。

singleTop

这个与 standard 很相似,只是当目标 Activity 位于栈顶时,不创建新的。

假设 C 是 singleTop 的,则:

A -> B -> C -> C -> B,此时系统中有四个 Activity,其中 B 是两个,而 C 由于是 singleTop,且自己启动自己时位于栈顶,所以不会创建新的。

现在说说哪些情况下目标 Activity 位于栈顶呢?一是自动启动自己;二是目标位于自己的下一层,先 finish() 杀死自己再启动目标,目标就位于栈顶了。题外话:晕,居然自己都 finish() 了,后面的 startActivity 还能运行。

singleTask

这种情况下,只要 Activity 存在,就调用其 onNewIntent 方法,而不是创建一个新的。如果 Activity 不存在,那当然没话说了,创建一个新的。

同时,它还要杀死目标 Activity 栈上部的 Activity。

假设 B 是 singleTask 的,则:

A -> B -> C -> C -> B,此时系统中有两个 Activity,C 被杀死了,B 拿之前的实例来用,并没有创建新的。所以只剩 A、B。

singleInstance

它跟 singleTask 很像,只是它没那么霸道,它并不会杀死栈上部的 Activity。

假设 B 是 singleInstance 的,则:

A -> B -> C -> C -> B,此时系统中有四个 Activity,C 有两个,B 有一个。

你前面那位网友看了:微软IE8内测版推出 网页可切割后分块刷新

▲▲▲嘿,欢迎转载传播本站原创文章,尽量保留来源噢。▲▲▲

文章评论
标题:必填
内容:
本站永远终止与捏造“罪名”不支付广告费的某度联盟合作。
vkvi
vkvi

作者简介: vkvi,致力于 .NET Web 开发、移动开发的技术推广,在 .NET、SQL Server、Windows Server 等方面有深入研究和丰富经验,10 年间共计撰写文章 4000 余篇。 主持金融、国土、农业、电商等多个行业项目执行, 推行“技术提升生产力、人心决定成功率”的管理理论。 联系他