Android系统启动流程.
1.当系统引导程序启动Linux内核时, 内核会加载各种数据结构和驱动程序. 有了驱动之后, 开始启动Android系统并加载用户级别的第一个进程init(system/core/init/Init.c).
1 | int main(int argc, char **argv) |
2.加载Init.rc文件. 主要启动了一个Zygote(孵化器)进程, 此进程是Android系统启动关键服务的一个母进程.
1 | service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server |
3.Zygote进程的初始化在App_main.cpp文件中开启, 代码片段如下:
1 | int main(int argc, const char* const argv[]) |
4.现在从c或c++代码进入到java代码中, ZygoteInit.java初始化类, 代码如下:
1 | public static void main(String argv[]) { |
5.Zygote进程分叉出SystemServer类, main函数如下:
1 | public static void main(String[] args) { |
6.comandroidserver_SystemServer.cpp的代码片段如下:
1 | static JNINativeMethod gMethods[] = { |
7.system_init方法的方法体, 在System_init.cpp类中. 代码如下:
1 | extern "C" status_t system_init() |
8.SystemServer下init2方法如下:
1 | public static final void init2() { |
9.ServerThread中的run方法如下:
1 | @Override |
10.ActivityManagerService下的systemReady方法如下:
1 | public void systemReady(final Runnable goingCallback) { |
11.ActivityStack中的resumeTopActivityLocked方法如下:
1 | final boolean resumeTopActivityLocked(ActivityRecord prev) { |
12.home界面显示, 这时Android系统启动完毕. 进入到待机画面.
本帖附件
乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站