Activity生命周期之冷启动

💡 原文中文,约66200字,阅读约需158分钟。
📝

内容提要

本文详细分析了Android Activity的生命周期和启动过程,包括进程创立、绑定Application、创立Activity等过程,以及可见性更新、暂停流程、停止流程和动画完毕后的处理。

🔎

延伸解读

冷启动为何要分三阶段

文章将冷启动拆为三个阶段:App端发起请求、服务端处理暂停与可见性、创建目标进程并attach。这种划分并非随意,而是对应了系统实际异步执行的关键节点。理解阶段划分有助于定位启动耗时:第一阶段主要消耗在ATMS解析与窗口层级构建,第二阶段等待后台Activity暂停,第三阶段等待进程创建与绑定。通常进程创建最慢,因此第二阶段往往先于第三阶段完成。

窗口层级树在启动中的角色

ActivityStarter执行过程中会创建root Task并挂载ActivityRecord,形成从RootWindowContainer到WindowState的层级。此时ActivityRecord尚未持有实际窗口,它只是管理窗口的容器。启动窗口(splash screen)在此阶段创建,用于填补进程创建期间的视觉空白。理解这一层级有助于分析启动白屏、窗口动画与Activity生命周期的关联。

暂停后台Activity的时机与影响

在启动目标Activity前,系统会先暂停后台Task的resumed Activity,将其状态置为PAUSING并通知App端。这一过程是异步的,且会阻塞目标Activity的resume,直到暂停完成。文章指出,若设置pauseImmediately为true可跳过等待,但可能导致数据丢失。因此,默认行为是等待暂停完成,这解释了冷启动时为何会有短暂延迟。

进程创建与attach的异步性

目标Activity的进程创建是异步的,且通常比暂停流程更慢。因此,第二阶段(暂停完成)往往先于第三阶段(进程attach)结束。当进程创建完成后,系统会通过ActivityTaskSupervisor的startSpecificActivity检查进程状态,若已就绪则直接通知App端启动Activity。这种异步设计意味着启动流程并非严格线性,开发者需注意生命周期回调可能交错触发。

❓

Q&A

Android Activity的生命周期是如何管理的?

Android Activity的生命周期通过ActivityTaskManagerService(ATMS)进行管理,涉及创建、暂停、恢复等多个状态。

冷启动App的过程分为几个阶段?

冷启动App的过程分为三个阶段:第一阶段由App端发起,第二阶段由服务端处理Activity的暂停和可见性更新,第三阶段创建目标Activity的进程。

ActivityTaskManagerService的作用是什么?

ActivityTaskManagerService负责处理Activity的启动请求,管理Activity的状态和生命周期。

在Activity启动过程中,如何处理动画?

在Activity启动过程中,动画通过TransitionController进行管理,确保在Activity状态变化时正确处理动画效果。

如何通过代码启动一个Activity?

通过调用Context的startActivity方法,并传入Intent和相关参数来启动一个Activity。

Activity的可见性是如何更新的?

Activity的可见性通过ActivityClientController处理,确保在Activity状态变化时更新其可见性。

🏷️

标签

➡️

继续阅读