1、借用一张别人的启动流程图先直观感受下:
注意:zygote和servicemanager都是在init进程解析init.rc时启动的。
zygote进程的入口是/system/bin/app_process,入口函数是App_main.cpp的main()函数。
service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server
class main
socket zygote stream 660 root system
onrestart write /sys/android_power/request_state wake
onrestart write /sys/power/state on
onrestart restart media
onrestart restart netd
2、启动流程大概如下,第一个图是zygote进程启动,第二个图是system_server进程启动:
贴一个system_server进程调用栈直观感受下:
12-31 09:54:59.941585 757 757 W System.err: at android.os.Handler.dispatchMessage(Handler.java:103)
12-31 09:54:59.941627 757 757 W System.err: at android.os.Looper.loop(Looper.java:193)
12-31 09:54:59.941666 757 757 W System.err: at com.android.server.ServerThread.initAndLoop(SystemServer.java:1651)
12-31 09:54:59.941708 757 757 W System.err: at com.android.server.SystemServer.main(SystemServer.java:1746)
12-31