`

Android Activity的4种TaskMode

阅读更多
只是自己看。
1. 标准
2. SingleTop
3. SingleTask
4. SingleInstance

1.
不用说,标准方式,只有一个Task 启动一个activity则会放一个activity到Task(个人理解为栈)中
即使是启动同样的activity也会一直放入堆栈中。当用户返回时则一个activity一个的退回。
2. SingleTop.
同标准模式。只有一个Task,只是当栈顶的Activity和要启用的Acitivity相同时。则不会启动新的Acitivity。
也就是说不会生成新的Activitys实例. 如果要启用Activity在Task中但不在栈顶,那也会生成新的Acitivty.
3. SigngleTask.
比2更进一步。依然只有一个Task.
然后忘了汗啊。

引用:
singleTask模式和后面的singleInstance模式都是只创建一个实例的。

当intent到来,需要创建singleTask模式Activity的时候,系统会检查栈里面是否已经有该Activity的实例。如果有直接将intent发送给它。

只是注意因为要重用这个Activity,则这个Acitivty会在栈顶,那么之前的singleTask上面的Activity就会被移出栈。


4. SingleInstance.
这个Acitivty只会有一个实例,在一个单独的Task中只Task只有这一个Activity。
一个这样的Acitivty,如Google地图,在我们的程序中调用了它定位到成都。
当我们通过 Home把程序放入了后台。 那个当我们打开google地图时。这个Acitivity 还是在之前定位的位置。注意这不是通过SaveInstaceStatus保存的。这个Activity也没有重新Create.

注意:ActA,ActA2为标准模式,ActB为SingleInstance.
程序启动了ActA, 通过ActA启动了ActB若ActB是一个SingleInstace.
那个ActA和ActB会在不同的Task中。
若ActB又启用了ActA2.那么ActA2和ActA1在一个Task中。
这里我们在ActA2按返回会回到ActA1.而不是ActB.
可以理解为ActB是一个单独的栈中,而返回是回到上一个栈。



引用:
关于singleTask这个网上颇有争议,包括google api上的说明也让我看的是一头雾水,自己用实例亲测,终于算是搞清楚了

正解:1.singleTask 并不一定处于栈底

   2.singleTask 并不一定会是栈底的根元素 

    3.singleTask 并不一定会启动新的task  

     情况一:如果在本程序中启动singleTask的activity:假设ActivityA是程序的入口,是默认的模式(standard),ActivityB是singleTask 模式,由ActivityA启动,刚ActivityB不会位于栈底,不是根元素,不会启动新的task,此种情况ActivityB会和ActivityA在一个栈中,位于ActivityA上面

  情况二:如果ActivityB由另外一个程序启动:假设apkA是情况一中的应用,apkB是测试程序,在apkB中启动apkA中的ActivityB,刚ActivityB会位于栈底,是根元素,会启动新的task


注意:singleTask模式的Activity不管是位于栈顶还是栈底,再次运行这个Activity时,都会destory掉它上面的Activity来保证整个栈中只有一个自己,切记切记


详见:
http://marshal.easymorse.com/archives/2950
http://www.cnblogs.com/xiaoQLu/archive/2011/09/29/2195742.html

补充:
亲测,在返回时主栈退入结束后会回退到SingleInstace页面。
补充2:
再测SingleTask.
可以明确的确只会有一个实例。
上面的也的确是正解.
当我们在一个程序A中使用其它程序B的SingleTask ActB实例时,若该Activity并没有实例,则会生成在一个新实例并放入新的Task tb中(若此时启动B中新的标准Activity也会放入这个新的Task tb中). 通过返回会回到A程序。
若ActB已经开启,则ActB依然在原来的Task tb中。并不会放入到A程序中的栈。且tb会成为当前栈.按返回会跳到tb中的下一个Activty. 一直到这个Task中没有Activity实例。
最后回到A。
分享到:
评论

相关推荐

    命令手册 Linux常用命令

    命令手册 Linux常用命令

    【超强组合】基于VMD-雪融优化算法SAO-Transformer-GRU的光伏预测算研究Matlab实现.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手

    【超强组合】基于VMD-花朵授粉优化算法FPA-Transformer-BiLSTM的光伏预测算研究Matlab实现.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手

    基于SpringBoot+Shiro+mysql实现的个人博客前后台管理系统 【完整源码+数据库】

    一、功能描述 文章管理 分类管理 评论管理 数据库监控 通用页面 后台首页 友链管理 在线用户 权限管理 角色管理 站点管理 标签管理 主题管理 上传管理 用户管理 踢出页面 登录页面 注册页面 主题目录 默认主题 二、技术栈 Spring Boot、Apache Shiro、MyBatis-Plus、Alibaba Druid、Redis、MySQL、Thymeleaf 三、安装 将本项目源码导入本地开发工具(如 IntelliJ IDEA ),本地开发工具需要安装 lombok 插件 安装Mysql数据库:Mysql版本最低支持5.7,新建 database CREATE DATABASE pb_cms_base; 初始化数据库:找到项目数据库文件:docs/db/pb_cms_base.sql,执行 pb_cms_base.sql 前台首页,浏览器访问http://localhost:8080 后台首页,浏览器访问http://localhost:8080/admin使用账号密码admin,123456登录系统后台。

    暴风电视刷机 T55FUA 通用ECHO 屏ST5461D07-2 机编60000AM6400 AM6700 V1.0.03版本

    务必确认机身编号与文件名机编一致,如不一致,请勿下载 机身编号一般在机子背面的贴纸上 适配屏参:30164505 MSD6A838平台升级步骤 强制升级(不开机强制升级): 1、下载数据,压缩包解压,将BFTVUpdate838_xx.bin拷贝至U盘根目录下,插入电视USB端口 2、插拔下电源,按一下遥控器待机键后快速不停的点按遥控器上键触发主板识别U盘软件进行升级 3、升级成功需运行至100%,此时耐心等待电视自动操作,切勿断电或拔掉U盘 4、系统升级后第一次重启系统需要3分钟左右,属于正常现象,切勿断电 升级完成后可以在系统设置——本机信息——查询软件版本更新状态 注意: 1、U盘要求使用FAT32格式,建议4G-8G的品牌U盘,刷机成功率会高 2、升级到结束,大约需要8-30分钟,中途绝对不能断电 3、升级重启第一次进入系统,请等完全正常进入开机桌面之后,才能拨下U盘 4、如无法升级,将BFTVUpdate838_xx.bin文件重命名为BFTVUpdate838.bin,再尝试刷机

    wryh+pico12num.ttf

    wryh+pico12num.ttf

    性能优化与加载时间控制.docx

    性能优化与加载时间控制.docx

    【数据分析】基于matlab数据流分类的双模型半监督自组织模糊推理系统【含Matlab源码 9067期】.zip

    CSDN海神之光上传的代码均可运行,亲测可用,直接替换数据即可,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描博客文章底部QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    【超强组合】基于VMD-黑猩猩优化算法Chimp-Transformer-LSTM的光伏预测算研究Matlab实现.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手

    ubuntu系统下,很好用的多线程下载工程 类似于windows系统下的迅雷

    使用时,稍研究即可。

    基于java+swing+applet实现的家庭理财系统(含源码+数据库+答辩PPT)

    基于java Swing+applet实现的家庭理财系统(含源码+数据库+答辩PPT)

    HCIE-IPv6技术

    HCIE-IPv6技术

    【超强组合】基于VMD-粒子群优化算法PSO-Transformer-GRU的光伏预测算研究Matlab实现.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手

    数据可视化驾驶舱,包含地图,页面可以直接运行

    数据可视化驾驶舱,包含地图,页面可以直接运行

    【java毕业设计】师生交流平台源码(ssm+jsp+mysql+说明文档+LW).zip

    功能说明: 功能:个人中心、学生信息管理、教师信息管理、教学资源管理、教学反馈管理、教学答疑管理、作业发布管理、作业管理、我的收藏管理、管理员管理、留言板管理、论坛管理、系统管理模块。 环境说明: 开发语言:java 框架:ssm jdk版本:jdk1.8 数据库:mysql 5.7+ 数据库工具:Navicat11+ 管理工具:maven 开发工具:idea/eclipse 部署容器:tomcat7+

    动态加载的性能影响与优化.docx

    动态加载的性能影响与优化.docx

    【超强组合】基于VMD-蛇群优化算法SO-Transformer-LSTM的光伏预测算研究Matlab实现.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手

    网络优化基础理论.docx

    网络优化基础理论.docx

    AI进展下ChatGPT对文献情报工作的影响及启示

    内容概要:报告讨论了ChatGPT这一人工智能对话系统的最新进展及其核心技术体系,探讨了其对文献情报工作带来的深远影响,提出了相应的应对策略。主要内容涵盖ChatGPT的定义与关键技术、人工智能发展的启示、ChatGPT的具体影响及文献情报领域的未来展望和建议。 适合人群:从事或关心文献情报工作、自然语言处理、人工智能研究的学者及从业人员。 使用场景及目标:旨在帮助相关从业者理解和把握ChatGPT带来的变化,调整和完善工作流程,提高文献情报服务质量。适用于学术研究、技术创新等领域。 其他说明:文中提到了许多实例和具体措施,对于实际操作有着重要的指导意义。阅读者应该结合自身的工作情况,灵活运用这些建议。此外,报告呼吁业内专业人士积极合作,共同推进技术的应用和发展。

    【java毕业设计】致远汽车租赁系统源码(springboot+vue+mysql+说明文档+LW).zip

    功能说明: 管理员:管理员使用本系统涉到的功能主要有:首页,个人中心,用户管理,业务员管理,汽车类型管理,租赁汽车管理,汽车租赁管理,汽车归还管理,租赁订单管理,检查信息管理,系统管理等功能。 用户:用户使用本系统涉到的功能主要有:首页,个人中心,汽车租赁管理,汽车归还管理,租赁订单管理,检查信息管理,我的收藏管理等功能。 业务员:业务员使用本系统主要包括首页,个人中心,汽车租赁管理,汽车归还管理,租赁订单管理,检查信息管理等功能。 环境说明: 开发语言:java jdk:jdk1.8 数据库:mysql 5.7+ 数据库工具:Navicat11+ 管理工具:maven 开发工具:idea/eclipse

Global site tag (gtag.js) - Google Analytics