为了看得更清晰,以下使用代称
newtask:FLAG_ACTIVITY_NEW_TASK
cleartop:FLAG_ACTIVITY_CLEAR_TOP
singletop:FLAG_ACTIVITY_SINGLE_TOP
文章目录
一、default
1.1 default
1.2 单独 singletop
1.3 单独 cleartop
1.4 cleartop + singletop
二、newtask
2.1 单独 newtask
2.2 newtask + singletop
2.3 newtask + cleartop
2.4 newtask + cleartop + singletop
三、其他
一、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。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/hz/112485.html