本文基于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()函数
五、其他参考链接
Sorry, the comment form is closed at this time.