启动流程
Android启动是一个比较复杂的过程,今天只是粗略罗列一下Android的整体的启动流程,之后会详细就每个流程进行分析。
每天进步一点点。
总体启动流程
- 开机按钮
- 引导程序BootLoader
- Linux内核启动
- 启动init进程查找init.rc文件,并解析。
- Zygote进程启动
- SystemServer进程启动
- Binder线程池开启
- SystemServiceManager
- WindowManagerService
- PackageManagerService
- ActivityManagerService
- Launch引用程序启动。
- CameraService
- 其他服务
ServiceManager进程启动Binder线程初始化
ServiceManager进程都是通过init进程解析init.rc文件开启的,其启动流程如下:
- 启动init进程查找init.rc文件,并解析。
- ServiceManager进程启动。
- binder_open()打开binder驱动
- binder_become_context_manager()向Binder驱动发送指令,申请成为所有服务的管理者
- binder_loop()循环,处理client端发来的请求。
Activity的启动流程
- launcher点击应用图标。
- 向AMS发送启动请求,最用调用ApplicationThread中的scheduleReceiver()方法,ApplicationThread是一个Binder,负责与ams交互。
- 切换Handler线程,通过ActivityThread.H发送消息。
- handleMessage处理消息。
- 调用到handleLaunchActivity()后执行activity的onCreate()方法。
|