LaunchMode应用解析

 分类:Android, Java 阅读 (881)
7月 202020
 
转载请注明原文地址:http://bcoder.com/java/analysis-of-launchmode

本文基于Android8.1系统进行测试

一、四种LaunchMode

1. standard

默认方式,每次总是新建一个Activity,并放在当前任务的顶端。

2. singleTop(和FLAG_ACTIVITY_SINGLE_TOP标志一样的作用)

如果当前Activity栈的顶部是要打开的Activity,则不新建Activity,而是复用这个Activity,但是intent是通过onNewIntent事件传入(不能通过getIntent得到)。

如果当前Activity栈的顶部不是要打开的Activity,则新建一个Activity

3. singleTask

若被启动的activity的taskAffinity与调起这个activity的不同,则为此Activity新建一个任务,并且此Activity为新建任务的根Activity。若相同,则与普通启动无区别。

若所有task中已经有此Activity,则不新建此Activity,将Activity所在的task调到前台,并清楚Activity到栈顶之间的Activity。

三种情况:

1) Activity存在于某个任务中,且在栈顶,不创建新Activity,已存在的Activity触发onNewIntent

2)Activity存在于某个任务中,但不在栈顶,不创建新Activity。

又分两种情况:

I. 如果栈顶Activity的taskAffinity与此Activity的相同则自动关闭栈顶的Activity,直到此Activity时,触发onNewIntent

II. 如果栈顶Activity的taskAffinity与此Activity的不同,并且也是singleTask的,不会自动关闭顶部 的Activity,需要手动关闭,直到此Activity时,触发onNewIntent(但是在某些机型上没发现这种情况,而是I中的情况)(目前测试在Android9.0之前是这样的,9.0之后是第I种情况)

3)Activity不存在于某个任务中,则在当前任务中新建一个Activity并放在栈顶

4. singleInstance

该Activity始终在一个新的任务中创建,并且由该Activity启动的其他Activity始终在另外的任务中。就是说该Activity所在的任务有且只有一个Activity。

二、和FLAG_ATCIVITY_CLEAR_TOP的交互

 

三、关于taskAffinity

 

四、其他

1. moveTaskToBack()函数

五、其他参考链接

官方:了解任务和返回堆栈

官方:概览屏幕

打赏
 Posted by on 2020-07-20

Sorry, the comment form is closed at this time.