【Android 应用开发】Activity 返回堆栈管理 ( 阶段总结 | 任务栈管理 | 返回堆栈 | 清除返回堆栈 | 亲和性 | 启动模式补充 | standard | singleTop )

简介: 【Android 应用开发】Activity 返回堆栈管理 ( 阶段总结 | 任务栈管理 | 返回堆栈 | 清除返回堆栈 | 亲和性 | 启动模式补充 | standard | singleTop )

文章目录

一、 安卓应用任务栈管理

二、 任务与返回堆栈回顾

三、 返回堆栈清除

四、 关于亲和性回顾

五、 Activity 启动模式 LaunchMode 补充 ( standard | singleTop )







一、 安卓应用任务栈管理


1 . 官网 activity 配置文档 : AndroidMainifest.xml 中 Activity 标签设置参考 , 详细地列出了 <activity /> 标签可以设置的 39 3939 个属性 , 有些不常用 , 与任务栈管理相关的有 6 66 个常用标签 ;




2 . 任务栈管理常用方法 : 在应用开发过程中 , 使用下面的 6 66 个标签属性 , 3 33 个 Intent 标志常量 , 即可应对大多数的开发任务 , 如果遇到比较刁钻的需求 , 再去详细阅读文档 , 查找解决方案 ;



① <activity /> 的 6 66 个常用标签属性 :


taskAffinity : 亲和性 ;

launchMode : 启动模式 ;

allowTaskReparenting

clearTaskOnLaunch

alwaysRetainTaskState

finishOnTaskLaunch

② 3 33 个常用的 Intent 常量 :


FLAG_ACTIVITY_NEW_TASK

FLAG_ACTIVITY_CLEAR_TOP

FLAG_ACTIVITY_SINGLE_TOP





二、 任务与返回堆栈回顾


在博客 【Android 应用开发】Android 返回堆栈 与 任务 中对 Android 中的任务与返回堆栈进行了简要说明 ;


任务就是 Activity 实例集合 , 返回堆栈就是存储这些 Activity 实例的数据结构 , 这两个概念可以一定程度上等同理解 , 一个任务对应一个返回堆栈 ;






三、 返回堆栈清除


【Android 应用开发】Activity 返回堆栈清除操作 ( 默认状态 | 清除返回堆栈配置 | 不清除返回堆栈配置 | 清除指定界面配置 ) 博客中讲解了清除返回堆栈的一系列设置 ;




任务栈清除控制 : 在任务栈转为后台后 , 在转回前台 , 任务栈的行为设置 ;



① 默认状态任务栈操作 : 默认状态下 , 后台的任务的返回堆栈过 30 分钟就会被清空只剩下根元素 ;


② 不去清空任务栈 : 设置 android:alwaysRetainTaskState 为 true , 则后台任务栈不会被清空 ;


③ 立即清空任务栈 : 设置 android:clearTaskOnLaunch 为 true , 只要应用进入后台 , 就会马上清空任务栈 ;


④ 界面返回清空 : 设置 Activity 的 android:finishOnTaskLaunch 为 true , 任务栈中如果有该 Activity 实例 , 就会清空






四、 关于亲和性回顾


【Android 应用开发】Activity 任务亲和性 taskAffinity 设置 ( taskAffinity 属性 ) 简单介绍了亲和性相关知识 ;




亲和性仅在两个应用场景生效 :



① 更改 Activity 所在的父任务 : 即设置 android:allowTaskReparenting 效果 ;


② 启动新任务 : 启动 Activity 界面时 , Intent 中设置了 FLAG_ACTIVITY_NEW_TASK 标志位 ;






五、 Activity 启动模式 LaunchMode 补充 ( standard | singleTop )


之前的博客 【Android 应用开发】Android 返回堆栈管理 ( 默认启动模式 | 栈顶复用启动模式 | 栈内复用启动模式 | 单实例启动模式 | CLEAR_TOP 标识 ) 中描述了 Activity 的四种启动模式 ;



分析 Activity 启动模式时 , 从 Activity 创建行为 , 和 返回堆栈 ( 前台 , 后台 ) 两个角度分析 4 44 种启动模式 ;


standard, singleTop , singleTask , singleInstance , 4 44 种启动模式 ;


仅讨论没有外部标志位干扰的情况 , 纯启动模式设置对应的 Activity 实例显示方式 ;




1 . 模式分组 :



① 常用启动模式 : 其中 standard , singleTop 是经常使用的 , 功能类似 ;


Activity 实例位置 : 上述两种启动模式的 Activity 可以放在任何堆栈的任何位置 ;

Activity 实例个数 : 上述两种启动模式的 Activity 在单个返回堆栈中可以存在多个 , 可以同时存在与多个返回堆栈 ;

② 特殊启动模式 : singleTask , singleInstance 一般情况下不使用 , 只有开发特殊 APP 时才用到这两个启动模式 ;


Activity 实例位置 : 上述两种启动模式的 Activity 只能处于返回堆栈根元素位置 , 只能在堆栈最下面 ;

Activity 实例个数 : 上述两种启动模式的 Activity 在应用中只能存在一个 ;



2 . standard 启动模式 :



① 关于任务栈操作 :


不涉及任务栈操作 ( 一般情况 ) : 该启动模式不涉及任何任务栈操作 , 仅在当前任务栈中进行 Activity 实例的添加 ;

特殊情况 : Intent 对象中设置了 FLAG_ACTIVITY_NEW_TASK 指令 , 就 涉及到任务栈的操作 ;

② 启动 Activity 方式 : 每创建一个 Activity 实例 , 都要将其放入当前的任务返回堆栈栈顶中 ;


③ Activity 实例与返回堆栈对应 : 因此在 多个返回堆栈中 , 可能存在多个 Activity 实例 , 每个返回堆栈中可能存在多个 Activity 实例 ;




3 . singleTop 启动模式 : 与 standard 启动模式基本相同 , 只有一点不同 , 就是启动 Activity 时 , 当前栈顶的 Activity 实例是否是要启动的 Activity 实例类型 , 分两种情况进行讨论 ;



① 返回堆栈栈顶不是要启动的 Activity : 如果要启动的 singleTop 启动模式的 Activity 实例 , 并不是当前栈顶的 Activity 实例 , 那么后续操作与 standard 模式相同 ;


② 返回堆栈栈顶就是要启动的 Activity : 如果当前栈顶的 Activity 就是要启动的 Activity 类型实例 , 那么会采用如下逻辑进行处理 ;


栈顶复用 : 调用返回堆栈栈顶的 Activity 实例的 onNewIntent 方法 , 接收新的 Intent , 复用该 Activity 实例 ;

注意 : 只有在栈顶才复用 , 如果 Activity 实例在返回堆栈的中间部位或底部 , 不能复用 , 直接创建新的 singleTop 启动模式 Activity 实例 , 放入返回堆栈 ;


单个返回堆栈中可以存在多个 standard 和 singleTop 启动模式的 Activity 实例 ;


目录
相关文章
|
4月前
|
Linux Android开发 iOS开发
深入探索Android与iOS的多任务处理机制
在移动操作系统领域,Android和iOS各有千秋,尤其在多任务处理上展现出不同的设计理念和技术实现。本文将深入剖析两大平台在后台管理、资源分配及用户体验方面的策略差异,揭示它们如何平衡性能与电池寿命,为用户带来流畅而高效的操作体验。通过对比分析,我们不仅能够更好地理解各自系统的工作机制,还能为开发者优化应用提供参考。
|
4月前
|
算法 Linux 调度
深入探索安卓系统的多任务处理机制
【10月更文挑战第21天】 本文旨在为读者提供一个关于Android系统多任务处理机制的全面解析。我们将从Android操作系统的核心架构出发,探讨其如何管理多个应用程序的同时运行,包括进程调度、内存管理和电量优化等方面。通过深入分析,本文揭示了Android在处理多任务时所面临的挑战以及它如何通过创新的解决方案来提高用户体验和设备性能。
120 1
|
5月前
|
Android开发
Android面试之Activity启动流程简述
Android面试之Activity启动流程简述
135 6
|
5月前
|
消息中间件 Android开发 索引
Android面试高频知识点(4) 详解Activity的启动流程
Android面试高频知识点(4) 详解Activity的启动流程
49 3
|
5月前
|
Android开发
Android面试之Activity启动流程简述
Android面试之Activity启动流程简述
42 0
|
Android开发
Android 跳转到系统应用管理
Intent i = new Intent("android.settings.APPLICATION_DETAILS_SETTINGS");String pkg = "com.android.settings";String cls = "com.
5516 0
|
6天前
|
JavaScript Linux 网络安全
Termux安卓终端美化与开发实战:从下载到插件优化,小白也能玩转Linux
Termux是一款安卓平台上的开源终端模拟器,支持apt包管理、SSH连接及Python/Node.js/C++开发环境搭建,被誉为“手机上的Linux系统”。其特点包括零ROOT权限、跨平台开发和强大扩展性。本文详细介绍其安装准备、基础与高级环境配置、必备插件推荐、常见问题解决方法以及延伸学习资源,帮助用户充分利用Termux进行开发与学习。适用于Android 7+设备,原创内容转载请注明来源。
55 19
|
1月前
|
JavaScript 搜索推荐 Android开发
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
69 8
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
|
1月前
|
前端开发 Java Shell
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
183 20
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
1月前
|
Dart 前端开发 Android开发
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
59 4
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex

热门文章

最新文章