对 FLAG_ACTIVITY_NEW_TASK、FLAG_ACTIVITY_CLEAR_TOP、FLAG_ACTIVITY_SINGLE_TOP 的理解

对 FLAG_ACTIVITY_NEW_TASK、FLAG_ACTIVITY_CLEAR_TOP、FLAG_ACTIVITY_SINGLE_TOP 的理解为了看得更清晰,以下使用代称newtask:FLAG_ACTIVITY_NEW_TASKcleartop:FLAG_ACTIVITY_CLEAR_TOPsingletop:FLAG_ACTIVITY_SINGLE_TOP文章目录default单独singletop单独cleartopcleartop+singletopnewtask单独newtasknewtask+sin…

大家好,又见面了,我是你们的朋友全栈君。

为了看得更清晰,以下使用代称
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。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/160766.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 考研复试-数据库面试题[通俗易懂]

    考研复试-数据库面试题[通俗易懂]准备复试时自己从别的博客上复制的一些面试题,因为当时都复制到一个文本文件中了,也不知道从谁的博客上复制的。触发器的作用?答:触发器是一中特殊的存储过程,主要是通过事件来触发而被执行的。它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。可以联级运算。如,某表上的触发器上包含对另一个表的数据操作,而该操作又会导致该表触发器被触发。什么是存储…

    2022年6月21日
    28
  • 第一天python是干什么的–数字常量

    第一天python是干什么的–数字常量Python是干什么的?Python历史发明人:guidovanrossum1989名称:montypython马戏团发音:拍桑美国拍森英语Python能干啥?Python

    2022年7月5日
    20
  • Redis Sentinel实现Failover

    Redis Sentinel实现Failover

    2021年9月9日
    66
  • django配置文件详解_如何看计算机配置信息

    django配置文件详解_如何看计算机配置信息前言Django的配置文件settings.py用于配置整个网站的环境和功能,核心配置必须有项目路径、密钥配置、域名访问权限、App列表、中间件、资源文件、模板配置、数据库的连接方式基本配置信息

    2022年7月30日
    5
  • fiddler抓包模拟器教程_wpe手机模拟器抓包

    fiddler抓包模拟器教程_wpe手机模拟器抓包1.打开,Fiddler.点击tools设置,把HPPPS证书保存在桌面,拖动到安卓模拟器里面.重启Fiddler2.长按网络,修改主机名和端口.在设置[安全]里,添加证书.转载于:https://www.cnblogs.com/limi2019/articles/11411904.html…

    2022年10月2日
    2
  • Java数字图像处理基础 – 必读

    写了很多篇关于图像处理的文章,没有一篇介绍Java2D的图像处理API,文章讨论和提及的API都是基于JDK6的,首先来看Java中如何组织一个图像对象BufferedImage的,如图:一个Buf

    2021年12月21日
    43

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号