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


相关推荐

  • 视频一键识别生成字幕

    视频一键识别生成字幕前不久我介绍了通过视频生成字幕的技术原理(博客、B站),我现在把这个功能打包成一个易于操作的界面,如下图所属:操作非常的简单,打开程序后,点击上面【打开要识别的视频按钮】,就会弹出下图的打开文件对话框,选择需要生成字幕的视频:稍等片刻,待程序识别并生成完成后就弹出如下保存对话框,填写要保存的字幕文件名就可以了:最后生成类似如下的文件就可以在你的视频编辑软件中进行合并了。软件下载…

    2022年6月8日
  • python 生成exe文件

    python 生成exe文件在windows下,可以使用pyinstaller打包python程序为exe可执行程序。1、安装pyinstaller在cmd命令行窗口运行以下命令安装pyinstallerpipinstallpyinstaller2、打包python程序在python程序所在目录,执行以下命令#切换到指定目录cd/dpath#正常打包命令pyinstaller-F-w-iico_pathxxx.py-F是将所有文件打成一个exe文件,一般是必写的(注意必须

    2022年4月29日
  • spdlog用法

    spdlog用法转自:https://blog.csdn.net/haojie_superstar/article/details/89383433?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-19.control&dist_request_id=1328730.643.16167433128441371&depth_1-utm_source=distribute.pc_relevant.none-task-bl

    2022年6月23日
  • django初探-创建简单的博客系统(一)

    django第一步1.django安装pipinstalldjangoprint(django.get_version())查看django版本2.创建项目打开cmd,进入指定目录

    2021年12月19日
  • 旧安卓手机数据转移到新苹果_安卓手机互传数据

    旧安卓手机数据转移到新苹果_安卓手机互传数据如果之前是安卓用户,在购买iPhone12新款手机之后,如何从安卓转移数据到iOS?可以通过苹果官方提供的“转移到iOS”应用,将安卓手机中的内容进行转移,一起来了解一下吧如果之前是安卓用户,在购买iPhone12新款手机之后,如何从安卓转移数据到iOS?可以通过苹果官方提供的“转移到iOS”应用,将安卓手机中的内容进行转移,感兴趣的朋友快来看看吧!如何将数据从安卓设备转移到i…

    2022年9月18日
  • Android 在本地应用 启动抖音(进入主页)

    Android 在本地应用 启动抖音(进入主页)

    2021年3月12日

发表回复

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

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