手机启动过程:
1.linux内核启动:压缩内核启动 内核初始化 启动内核 (linux部分)
1.linux内核启动:压缩内核启动 内核初始化 启动内核 (linux部分)
2.执行init进程 由init.c解析init.rc文件 启动zygote(孵化器 第一个dalvik虚拟机 )
service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server
zygote是一个C程序(详见app_main.cpp)
在app_main中调用了AndroidRuntime(AndroidRuntime.cpp) 的start()方法
在start()方法中 1.完成Dalvik虚拟机的创建 ,2.注册JNI方法,3.同时通过反射执行了ZygoteInit的main 从而开启了java世界
详细请看ZygoteInit.java
首先注册一个socket并监听(主要与AMS进行通信)
调用了preloadClasses(); preloadResources(); 来加载一下共享资源
然后产生子线程system_server 在system_server方法中完成各种服务的初始化(WMS,AMS,各种Service)
当AMS初始化完成后 通过之前注册的socket告诉服务端 开始执行home程序