Skip to content
阅读进度

如何理解从图标点击到首帧的启动链路? ​

返回 性能与稳定性 目录

标准回答 ​

典型路径是 Launcher 发起启动请求,经 Binder 到 system_server,ATMS 处理 Activity 和任务栈,相关进程管理逻辑在需要时请求 Zygote 创建应用进程。应用通过 ActivityThread 与系统建立联系,在主线程处理绑定应用、组件初始化和 Activity 生命周期。

页面创建后,ViewRootImpl 驱动 View 的测量布局与绘制;硬件加速路径会涉及 RenderThread 和 GPU。应用生成的缓冲被显示系统消费,SurfaceFlinger 与 HWC 协调合成、提交并最终显示。

这不是所有启动都严格执行的线性清单:已有进程、任务复用、启动窗口和过渡动画会改变路径。定位时分别看请求到进程、进程到页面、页面到首个有效帧的等待。

追问与回答 ​

Application.onCreate 之前一定没有业务代码吗 ​

不是。类初始化、Application 构造和 attachBaseContext,以及启动路径上的 ContentProvider 初始化都可能更早执行。不能只盯 Application.onCreate。

ActivityThread 是不是一个 Java Thread 子类 ​

它是应用主线程的管理入口和调度对象,并不靠继承 Thread 来代表主线程。按实际类定义和调用链解释即可。

参考资料 ​

内容来源 ​

用完整回答理解机制,用真实证据解释项目。