www.cftea.com

安卓 Activity 的四种 launchMode

ITPOW2018/7/19 20:09:27

这个 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 有一个。

<<返回首页<<