android核心系列--2,关于任务栈(task)
一,任务
任务是由界面组件组成的一个栈,这些界面组件可以来自多个进程,多个应用,为共同完成一项任务而存在,比如写邮件时会用到邮件应用和联系人应用中的界面组件,这些界面组件在同一个任务中运行。
二,界面组件的运行模式
1,standard 标准模式,每次调用界面组件都会生成一个新的实例压入任务栈的栈顶。
2,singleTop ,对应 Activity_FLAG_ACTIVITY_SINGLE_TOP,如果当前界面组件在栈顶,则再次调用该界面组件时不会生成新的实例,而是直接使用栈顶的界面组件,通过 onNewIntent方法将 Intent对象传给界面组件。 但是如果界面组件不在栈顶,则会在栈顶生成新的实例。
3,singleTask 和 singleInstance,当调用这种运行模式的界面组件时,会启动一个新的任务(如果还没启动的话),将该界面组件放入栈底。如果再次调用该界面组件,则会将该界面组件上方清空,再次复用该界面组件。
singleInstance有一点不同,就是新任务中有且只有这一个界面组件,而singleTask则是在新任务中会有多个其它的界面组件。
使用singleTask还需注意:如果界面组件同时设置了任务粘度属性,android:taskAffinity属性,那么该界面组件就不一定必须是根组件了,如果指定的任务已经存在,它会直接跳到指定的任务中去。
三,任务粘度 android:taskAffinity 属性
表明这个界面组件想在哪个任务中运行,单独设置该属性没用,需要再设置下面的其中一项:
1,设置 android:allowTaskReparenting = "true"
2,通过设置Activity.FLAG_ACTIVITY_NEW_TASK标记。
四,实例:
1,安卓原生应用:浏览器应用
其界面组件 BrowserActivity 配置成了 singleTask ,同时设置了 android:alwaysRetainTaskState = "true",该设置表示总是维护任务状态。
2,联系人应用:
通过 android:taskAffinity 将联系人管理,来电管理相关的界面组件分别放在不同的任务中。
参考:
《android开发精要》 范怀宇 著
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架