详解Android.activity销毁流程的工作原理
继续我们的源码解析,上一篇文章我们介绍了Activity的启动流程,一个典型的场景就是Activity a 启动了一个Activity b,他们的生命周期回调方法是: onPause(a) –> onCreate(b) –> onStart(b) –> onResume(b) –> onStop(a) 而我们根据源码也验证了这样的生命周期调用序列,那么Activity的销毁流程呢?它的生命周期的调用顺序又是这样的呢? 这里我们我做一个简单的demo,让一个Activity a启动Activity b,然后在b中调用finish()方法,它们的生命周期执行顺序是: onPause( Activity的销毁流程是Android应用程序开发中的重要组成部分,它与启动流程紧密相关,共同构成了Activity生命周期的核心。在Android系统中,Activity的销毁通常是由用户交互、系统资源管理或开发者主动调用`finish()`方法触发的。下面我们将深入探讨Activity销毁流程的工作原理。 当我们在一个Activity(如Activity A)中启动另一个Activity(如Activity B),并随后在B中调用`finish()`方法时,会触发一系列的生命周期回调。这个过程的顺序如下: 1. `onPause(B)`:B开始暂停,即将进入后台。 2. `onRestart(A)`:A重新启动,因为它是被B覆盖的,现在将回到前台。 3. `onStart(A)`:A开始启动,准备可见。 4. `onResume(A)`:A恢复到活跃状态,用户可以与其交互。 5. `onStop(B)`:B完全停止,不再可见。 6. `onDestroy(B)`:B销毁,释放所有资源。 从源码的角度看,Activity的销毁流程始于调用`finish()`方法: 1. `Activity.finish()`:调用`finish()`,它会调用一个带布尔参数的重载方法`finish(false)`。这个参数在这里并不重要,主要是为了兼容旧版本的代码。 2. `ActivityManagerNative.getDefault().finishActivity()`:通过Binder机制调用到系统的ActivityManagerService,这个服务负责管理所有应用的Activity实例。 3. `ActivityManagerService.finishActivity()`:在ActivityManagerService中,这个方法处理结束Activity的请求,最终调用`ActivityStack.requestFinishActivityLocked()`。 `ActivityStack.requestFinishActivityLocked()`方法是销毁Activity的主要入口,它执行以下主要步骤: - 检查当前Activity的状态,确保可以安全地结束。 - 准备结果数据,如果Activity有返回结果给启动它的Activity。 - 调用`finishActivityLocked()`,执行实际的销毁操作。 `ActivityStack.finishActivityLocked()`进一步执行以下操作: - 通知系统Activity已暂停,调用`startPausingLocked()`。 - 更新Activity的栈状态,可能涉及任务栈的管理。 - 调整窗口的显示,确保用户界面正确更新。 - 调用`Activity.onDestroy()`,这是Activity生命周期中最后一个回调方法,开发者通常在这里释放资源和取消订阅等操作。 - 系统释放与Activity相关的内存和其他资源。 理解Activity的销毁流程对于优化应用性能和避免内存泄漏至关重要。开发者应确保在`onDestroy()`方法中正确清理资源,以防止内存泄漏和提高应用的运行效率。同时,理解这个流程也有助于在设计复杂的Activity间交互时做出明智的决策。
剩余7页未读,继续阅读
- 粉丝: 4
- 资源: 897
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Python_欢迎来到AWS代码示例存储库此仓库包含AWS文档中使用的代码示例AWS SDK开发人员指南和更多有关更多.zip
- Python_机器学习算法实现的最小和干净的例子.zip
- Python_机器学习示例和教程的集合.zip
- Python_机器学习的开源特性商店.zip
- Python_基于Django的博客系统.zip
- Python_基于Docker青龙面板群晖的每日签到脚本支持多账号签到列表 爱奇艺全民K歌有道云笔记百度贴吧Bilib.zip
- Python_机器学习相关教程.zip
- Python_基于LLM的自主代理,可以对任何主题进行本地和网络研究,并生成包含引用的综合报告.zip
- Python_基于GPU的跨平台快速功能终端.zip
- Python_基于OpenTelemetry的LLM应用程序的开源可观察性.zip
- Python_基于Web的ssh客户端.zip
- python_基于Vue Django和Doc的开源在线裁判.zip
- Python_基于Web的本地化工具,具有严格的版本控制集成.zip
- Python_基于搜狗微信搜索的微信公众号爬虫接口.zip
- Python_基于决策树算法的快速分布式高性能梯度增强GBT、GBDT、GBRT、GBM或MART框架,用于排序分类和.zip
- Python_基于卫星航拍图像的深度学习技术.zip