更多面试题请看这里:https://interview.raoyunsoft.com/
当用户点击应用图标时,整个启动过程涉及多个系统进程协作,主要流程如下:
-
Launcher发起请求
用户点击图标后,Launcher进程(系统桌面)通过Binder IPC向SystemServer进程的ActivityManagerService(AMS)发起startActivity请求,携带目标Activity信息。 -
SystemServer请求创建进程
SystemServer进程收到请求后,确认目标应用进程尚未存在,通过socket通信向Zygote进程发送创建新进程的指令。 -
Zygote孵化应用进程
Zygote进程通过fork()系统调用创建新的应用进程,并初始化ART虚拟机环境,加载目标应用的Application类。 -
应用进程绑定SystemServer
新创建的应用进程通过Binder IPC向SystemServer进程发起attachApplication请求,将进程信息注册到AMS,并初始化ApplicationThread(用于跨进程通信)。 -
调度启动目标Activity
SystemServer进程(AMS)收到绑定请求后,通过Binder IPC向应用进程发送scheduleLaunchActivity指令,要求启动目标Activity。 -
主线程准备启动
应用进程的ApplicationThread收到指令后,通过Handler向主线程(UI线程)发送LAUNCH_ACTIVITY消息。 -
创建Activity执行生命周期
主线程处理消息时完成核心操作:- 通过反射实例化目标Activity
- 调用
Activity.onCreate()初始化界面 - 依次执行
onStart()和onResume() - 完成DecorView的绘制与显示
最终用户即可看到应用界面。整个过程通常在200ms-500ms内完成(冷启动场景)。
关键优化点:
- 步骤7之前会先执行
Application的onCreate()- 过度复杂的初始化会导致启动白屏
- 多进程应用会重复步骤3-4
1043

被折叠的 条评论
为什么被折叠?



