android App 启动流程详解

android App 启动流程详解

  1. 启动请求阶段
    用户点击应用图标:
    Launcher(桌面应用)通过 startActivity() 发送启动请求,携带目标应用的入口 Activity 信息,如包名和组件名15。

Launcher 请求传递:
启动请求通过 Binder 机制传递给系统服务 ActivityManagerService(AMS)进行合法性验证(如权限、Intent 匹配等)15。

  1. AMS 处理请求
    创建 Task 和 ActivityRecord:
    AMS 为待启动的 Activity 创建新的 Task(任务栈)和 ActivityRecord,用于管理 Activity 的生命周期和状态15。

调度启动任务:
AMS 将启动请求加入系统主线程的消息队列,等待调度执行16。

  1. 应用进程创建
    Zygote 孵化新进程:
    若目标应用进程未运行,AMS 通过 Socket 向 Zygote 进程发送请求,由 Zygote 调用 fork() 创建新进程,继承已预加载的类库和资源47。

执行 ActivityThread.main():
新进程启动后,执行 ActivityThread 的 main() 方法,初始化主线程的 Looper 和消息循环34。

  1. 组件初始化
    绑定 Application:
    ActivityThread 调用 attach() 方法向 AMS 注册应用进程,随后创建 Application 实例并执行其 onCreate() 方法34。

创建 Activity 实例:
AMS 通过 Binder 通知应用进程创建目标 Activity,触发 Activity 的生命周期方法(如 onCreate()、onStart())13。

  1. 界面显示
    界面渲染:
    Activity 的 onResume() 方法执行后,View 系统通过 ViewRootImpl 完成界面测量、布局和绘制,最终通过 SurfaceFlinger 合成显示到屏幕16。

启动完成:
Activity 界面完全显示后,启动流程结束,应用进入可交互状态15。

关键依赖组件
Zygote:预加载系统资源,快速孵化应用进程78。
AMS:统一管理 Activity 生命周期和进程调度15。
Binder IPC:跨进程通信机制,支撑系统服务与应用进程的交互17。
此流程综合了系统服务协作、进程创建、组件初始化及界面渲染,核心目标是在保证安全性和效率的前提下完成应用启动

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容