对 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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 卷积神经网络常用模型_keras 卷积 循环 多分类

    卷积神经网络常用模型_keras 卷积 循环 多分类刚刚接触到深度学习,前2个月的时间里,我用一维的卷积神经网络实现了对于一维数据集的分类和回归。由于在做这次课题之前,我对深度学习基本上没有过接触,所以期间走了很多弯路。在刚刚收到题目的要求时,我选择使用TensorFlow来直接编写函数,结果由于没有什么基础,写了一个周我就放弃了,改用keras来完成我的任务。用keras来搭建神经网络其实很简单。网络的前面部分都是在提取一维信号的特征…

    2022年9月23日
    2
  • 获取base64编码格式的图片大小[通俗易懂]

    获取base64编码格式的图片大小[通俗易懂]//imageBase就是要传来的图片数据因为我传来的照片头部已经去掉了,所以这里就不需要再做处理,只做“=”号的处理就可以了publicintobtainImageSize(StringimageBase){Stringstr=imageBase;str=str.replace(“=”,””);//这里计算出来的是字节大小也即是Bintsize=(str.length()-(str.length()/8

    2022年6月19日
    23
  • MongoDB的增删改查

    MongoDB的增删改查

    2020年11月19日
    166
  • spring storedProcedure 使用

    spring storedProcedure 使用http://blog.csdn.net/xiao_jun_0820/article/details/7268219 StoredProcedure是一个抽象类,必须写一个子类来继承它,这个类是用来简化JDBCTemplate执行存储过程操作的。首先我们写一个实现类:[java]viewplaincopyprint?package com.huaye.f

    2022年7月26日
    7
  • 什么是tcp协议和udp协议_udp协议和tcp协议

    什么是tcp协议和udp协议_udp协议和tcp协议TCP(TransmissionControlProtocol传输控制协议)是一种面向连接(连接导向)的、可靠的、基于IP的传输层协议。TCP在IP报文的协议号是6。TCP是一个超级麻烦的协议,而它又是互联网的基础,也是每个程序员必备的基本功。首先来看看OSI的七层模型:我们需要知道TCP工作在网络OSI的七层模型中的第四层——Transport层,IP在第三层——Network层,A…

    2025年9月20日
    4
  • Laravel5.2中Eloquent与DB类的区别是什么?

    Laravel5.2中Eloquent与DB类的区别是什么?

    2021年11月9日
    40

发表回复

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

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