大家好,又见面了,我是你们的朋友全栈君。
为了看得更清晰,以下使用代称
newtask:FLAG_ACTIVITY_NEW_TASK
cleartop:FLAG_ACTIVITY_CLEAR_TOP
singletop:FLAG_ACTIVITY_SINGLE_TOP
文章目录
一、default
1.1 default
默认情况下(即没有 newtask flag),启动一个 Activity 时,被启动的 Activity 会在启动它的 Activity 的栈中创建(不管它们 taskAffinity 是否一样)。
如 A 启动 B,B 会在 A 的栈中被创建。
1.2 单独 singletop
activity 在前台(当前显示的栈的栈顶),不创建,它自己 onNewIntent 被调用
activity 不在前台,创建
1.3 单独 cleartop
activity 在启动它的栈里存在,它上面的 activity 会出栈,它自己 finish 后重建
activity 在启动它的栈里不存在,在启动它的栈里创建
1.4 cleartop + singletop
activity 在前台(当前显示的栈的栈顶),不创建,它自己 onNewIntent 被调用
activity 不在前台
- activity 在启动它的栈里存在,它上面的 activity 会出栈,它自己 onNewIntent 被调用
- activity 在启动它的栈里不存在,在启动它的栈里创建
二、newtask
加上 newtask flag 后,启动一个 Activity 时,如果需要创建,被启动的 Activity 会在它需要的栈中创建。
如 A 启动 B,B 会在 B 自己需要的栈中被创建(即 taskAffinity 指定的栈)。
2.1 单独 newtask
activity 需要的栈存在,在该栈中创建一个 activity 或将该栈移至前台
activity 需要的栈不存在,创建一个它需要的栈,再创建 activity
(activity 可能创建也可能不创建,如果创建,一定是在需要的栈里)
2.2 newtask + singletop
singeltop > newtask,先走 singletop
activity 在前台(当前显示的栈的栈顶),不创建,它自己 onNewIntent 被调用
activity 不在前台
- activity 需要的栈存在,在该栈中创建一个 activity 或将该栈移至前台(它自己 onNewIntent 被调用)
- activity 需要的栈不存在,创建一个它需要的栈,再创建 activity
2.3 newtask + cleartop
activity 在它需要的栈里存在,它上面的 activity 会出栈,它自己 finish 后重建
activity 在它需要的栈里不存在,在它需要的栈里创建
2.4 newtask + cleartop + singletop
singeltop > newtask、cleartop,先走 singletop
activity 在前台(当前显示的栈的栈顶),不创建,它自己 onNewIntent 被调用
activity 不在前台
- activity 在它需要的栈里存在,它上面的 activity 会出栈,它自己 onNewIntent 被调用
- activity 在它需要的栈里不存在,在它需要的栈里创建
这就相当与 singleTask 启动模式,具体的处理逻辑可在 ActivityStarter 中查看。
三、其他
其他一些注意点。
一个栈的栈底 activity 总是由 newtask 启动。
singleInstance 并没有自己特殊的 taskAffinity。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/160766.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...