[url]http://blog.youkuaiyun.com/luoshengyang/article/details/6768304[/url]
简要整理:
简要整理:
linux-->init
|
native服务zygote(init.rc中定义的service,代码:app_main.cpp //步骤1)
|
{AppRuntime.start(),AndroidRuntime.start()}
|
{通过jni调用Java函数ZygoteInit.java.main(),startVM(),RegJNI}
|
{startSystemServer(), 为zygote服务建立伺服socket}
| |
{RuntimeInit.java.zygoteInit(), 无限循环等待来自ActivityManagerService的请求并通知zygote服务为应用程序fork进程(逻辑流程回到步骤1)}
|
初始化binder,调用 SystemServer.java.main()
|
SystemServer.init1()
|
JIN:com_android_server_SystemServer.cpp ---> 启动native服务{SurfaceFlinger,AudioFlinger,Sensor,MediaPlayer,Camera,AudioPolicy}
|
调用libsystem_server库函数system_init(),代码:system_init.cpp
|
SystemServer.init2()
|
ServerThread.start()--->启动java服务{ActivityManager,Lights,SensorPower,Connectivity,Package,WindowManager,Bluetooth...}
本文详细解析了Android系统的启动流程,从Linux内核启动到init进程的执行,再到zygote进程的创建及其如何fork出系统服务与应用进程。涵盖了Binder机制的初始化、核心Java服务如ActivityManager的启动过程及Native服务的加载。
4842

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



