【Activity&Task&Stack】Android 中 Activity,Task,Stack 以及 Launch Mode 的一些说明
2013-06-23 23:42
239 查看
Acitivty 是 Android 应用框架中最主要的组件之一。可以 Task/ Stack 的机制来管理 Activity 的行为模式。在 Android 的官方文档里已经对Activity
的属性以及Task/Stack
的概念进行了说明。在《应用程序基础》一文中也有对这一主题的相关说明。这里专门对此进行进一步的说明。
Stack 保存了一个应用程序的所有没有被销毁(destroy)的 Activity。例如依次启动了 A、B、C 三个 Activity 之后,该 stack 的状态即为 |A-B-C。当 C 执行了 finish() 方法或是用户点击了返回键之后,stack 的状态变为了 |A-B。
而 task 则可以理解为是在 stack 中对 activity 进行了一种分组。例如:|1A-1B- 2A-2B-2C- 3A 中根据后缀可以分为三个不同的 task。这时所显示的是 3A,三个 task 的根 Activty 分别是 1A、2A、3A。通常,一个 task 中的 activity 是成组移动的。例如通过长按 HOME 键选择了 2C 之后,stack 将变为 |1A-1B- 3A- 2A-2B-2C。默认情况下,所有的 activity
将会属于同一个 task。不过各个 activity 之间的从属关系也能够通过 taskAffinity 被重新定义。而如果 Intent 对象含有 FLAG_ACTIVITY_NEW_TASK 旗标,则将会选择一个新的 task。
不同的启动模式也会影响 task 的分配:
如果用户长时间不使用一个 task,该 task 就会被清除以释放内存。不过根 Activity 将会被保留。例如:|1A-1B- 2A-2B-2C- 3A 在这种情况下将变为 |1A- 2A- 3A。如果将根 Activity 的 alwaysRetainTaskState 属性设为 true,则该 task 中的所有活动都将被始终保留。如果将根 Activity 的 clearTaskOnLaunch 属性设为 true,则在用户离开该 task
时包括根 Activity 在内的这一 task 将被完整清除。如果将 task 中的某个 Activity 的 finishOnTaskLaunch 属性设为 true,则在离开该 task 并返回之后,这一 Activity 将被清除。
的属性以及Task/Stack
的概念进行了说明。在《应用程序基础》一文中也有对这一主题的相关说明。这里专门对此进行进一步的说明。
Stack 保存了一个应用程序的所有没有被销毁(destroy)的 Activity。例如依次启动了 A、B、C 三个 Activity 之后,该 stack 的状态即为 |A-B-C。当 C 执行了 finish() 方法或是用户点击了返回键之后,stack 的状态变为了 |A-B。
而 task 则可以理解为是在 stack 中对 activity 进行了一种分组。例如:|1A-1B- 2A-2B-2C- 3A 中根据后缀可以分为三个不同的 task。这时所显示的是 3A,三个 task 的根 Activty 分别是 1A、2A、3A。通常,一个 task 中的 activity 是成组移动的。例如通过长按 HOME 键选择了 2C 之后,stack 将变为 |1A-1B- 3A- 2A-2B-2C。默认情况下,所有的 activity
将会属于同一个 task。不过各个 activity 之间的从属关系也能够通过 taskAffinity 被重新定义。而如果 Intent 对象含有 FLAG_ACTIVITY_NEW_TASK 旗标,则将会选择一个新的 task。
不同的启动模式也会影响 task 的分配:
如果用户长时间不使用一个 task,该 task 就会被清除以释放内存。不过根 Activity 将会被保留。例如:|1A-1B- 2A-2B-2C- 3A 在这种情况下将变为 |1A- 2A- 3A。如果将根 Activity 的 alwaysRetainTaskState 属性设为 true,则该 task 中的所有活动都将被始终保留。如果将根 Activity 的 clearTaskOnLaunch 属性设为 true,则在用户离开该 task
时包括根 Activity 在内的这一 task 将被完整清除。如果将 task 中的某个 Activity 的 finishOnTaskLaunch 属性设为 true,则在离开该 task 并返回之后,这一 Activity 将被清除。
相关文章推荐
- Android SingleTask 和 SingleInstance 的理解 以及 FLAG_ACTIVITY_NEW_TASK
- Android应用程序组件Activity的"singleTask"
- 解开Android应用程序组件Activity的"singleTask"之谜
- 解开Android应用程序组件Activity的"singleTask"之谜
- Android Material Design: 九种常见Activity及代码解析之"概要说明"
- android实现原理说明之一_application Intent Task Activity
- Android如何安全退出多个Activity(条件:同一个任务栈Task-stack)
- 解开Android应用程序组件Activity的"singleTask"之谜
- 解开Android应用程序组件Activity的"singleTask"之谜
- Android中Activity和task,活动亲和力,启动模式,活动状态以及生命周期,激活钝化
- 解开Android应用程序组件Activity的"singleTask"之谜
- [Android | RecyclerView] OnScrollListener() 参数说明 以及一些额外参数
- 一个由Activity launchMode="singleTask"属性引起的血案(Android)
- [Android学习系列10]关于Task,Activity,BackStack的一些事
- 解开Android应用程序组件Activity的"singleTask"之谜
- TASK和activity启动模式以及一些标识详解
- android的一些提示框 以及activity之间数据的传递
- android Task Activity launchMode="singleTask" singleInstance 代码分析
- AndroidMainifest标签使用说明3——<activity-alias>
- 解开Android应用程序组件Activity的"singleTask"之谜