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 09:54:59.941745 757 757 W System.err: at java.lang.reflect.Method.invokeNative(Native Method)
12-31 09:54:59.941821 757 757 W System.err: at java.lang.reflect.Method.invoke(Method.java:515)
12-31 09:54:59.941886 757 757 W System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:829)
在system_server进程启动过程中日志tag一直是SystemServer,直到打印"activitymanager: System now ready"。
3、再贴一点开机启动日志感受下:
01-22 11:09:55.121 I/dalvikvm( 257): System server process 1024 has been created
01-22 11:09:55.121 I/Zygote ( 257): Accepting command socket connections
01-22 11:09:55.201 I/ ( 1024): System server: starting sensor init.
Line 728: 01-22 11:09:55.201 I/SystemServer( 1024): Entered the Android system server!
Line 730: 01-22 11:09:55.211 I/SystemServer( 1024): Waiting for installd to be ready.
Line 732: 01-22 11:09:55.211 I/SystemServer( 1024): Power Manager
Line 734: 01-22 11:09:55.221 I/SystemServer( 1024): Activity Manager
Line 737: 01-22 11:09:55.401 I/SystemServer( 1024): Display Manager
Line 738: 01-22 11:09:55.401 I/SystemServer( 1024): Telephony Registry
Line 739: 01-22 11:09:55.401 I/SystemServer( 1024): MSimTelephony Registry
Line 741: 01-22 11:09:55.411 I/SystemServer( 1024): Scheduling Policy
Line 742: 01-22 11:09:55.411 I/SystemServer( 1024): Package Manager
Line 1814: 01-22 11:10:00.251 I/SystemServer( 1024): Entropy Mixer
Line 1816: 01-22 11:10:00.271 I/SystemServer( 1024): User Service
Line 1817: 01-22 11:10:00.271 I/SystemServer( 1024): Account Manager
Line 1818: 01-22 11:10:00.281 I/SystemServer( 1024): Content Manager
Line 1819: 01-22 11:10:00.281 I/SystemServer( 1024): System Content Providers
Line 1820: 01-22 11:10:00.331 I/SystemServer( 1024): Lights Service
Line 1822: 01-22 11:10:00.341 I/SystemServer( 1024): Battery Service
Line 1823: 01-22 11:10:00.341 I/SystemServer( 1024): Vibrator Service
Line 1832: 01-22 11:10:00.351 I/SystemServer( 1024): Consumer IR Service
Line 1833: 01-22 11:10:00.351 I/SystemServer( 1024): Alarm Manager
Line 1834: 01-22 11:10:00.351 I/SystemServer( 1024): Init Watchdog
Line 1835: 01-22 11:10:00.351 I/SystemServer( 1024): Input Manager
Line 1837: 01-22 11:10:00.371 I/SystemServer( 1024): Window Manager
Line 1853: 01-22 11:10:00.421 I/SystemServer( 1024): Bluetooth Manager Service
Line 1854: 01-22 11:10:00.421 I/SystemServer( 1024): Input Method Service
Line 1862: 01-22 11:10:00.461 I/SystemServer( 1024): Accessibility Manager
Line 1865: 01-22 11:10:00.491 I/SystemServer( 1024): Mount Service
Line 1892: 01-22 11:10:00.501 I/SystemServer( 1024): LockSettingsService
Line 1893: 01-22 11:10:00.501 I/SystemServer( 1024): Device Policy
Line 1894: 01-22 11:10:00.501 I/SystemServer( 1024): Status Bar
Line 1895: 01-22 11:10:00.501 I/SystemServer( 1024): Clipboard Service
Line 1899: 01-22 11:10:00.511 I/SystemServer( 1024): NetworkManagement Service
Line 1904: 01-22 11:10:00.511 I/SystemServer( 1024): Text Service Manager Service
Line 1906: 01-22 11:10:00.511 I/SystemServer( 1024): NetworkStats Service
Line 1908: 01-22 11:10:00.511 I/SystemServer( 1024): NetworkPolicy Service
Line 1928: 01-22 11:10:00.521 I/SystemServer( 1024): Wi-Fi P2pService
Line 2148: 01-22 11:10:00.691 I/SystemServer( 1024): Wi-Fi Service
Line 2152: 01-22 11:10:00.771 I/SystemServer( 1024): SambaServer Service
Line 2155: 01-22 11:10:00.771 I/SystemServer( 1024): SambaClient Service
Line 2159: 01-22 11:10:00.781 I/SystemServer( 1024): Connectivity Service
Line 2277: 01-22 11:10:00.831 I/SystemServer( 1024): Network Service Discovery Service
Line 2279: 01-22 11:10:00.831 I/SystemServer( 1024): DPM Service
Line 2280: 01-22 11:10:00.831 I/SystemServer( 1024): DPM configuration set to 3
Line 2283: 01-22 11:10:00.841 I/SystemServer( 1024): UpdateLock Service
Line 2286: 01-22 11:10:00.901 I/SystemServer( 1024): Notification Manager
Line 2310: 01-22 11:10:01.181 I/SystemServer( 1024): Device Storage Monitor
Line 2312: 01-22 11:10:01.191 I/SystemServer( 1024): Location Manager
Line 2313: 01-22 11:10:01.191 I/SystemServer( 1024): Country Detector
Line 2314: 01-22 11:10:01.191 I/SystemServer( 1024): Search Service
Line 2315: 01-22 11:10:01.191 I/SystemServer( 1024): DropBox Service
Line 2316: 01-22 11:10:01.191 I/SystemServer( 1024): Wallpaper Service
Line 2318: 01-22 11:10:01.211 I/SystemServer( 1024): Audio Service
Line 2335: 01-22 11:10:01.311 I/SystemServer( 1024): Dock Observer
Line 2337: 01-22 11:10:01.321 I/SystemServer( 1024): Wired Accessory Manager
Line 2339: 01-22 11:10:01.321 I/SystemServer( 1024): USB Service
Line 2343: 01-22 11:10:01.331 I/SystemServer( 1024): Serial Service
Line 2344: 01-22 11:10:01.331 I/SystemServer( 1024): Twilight Service
Line 2345: 01-22 11:10:01.331 I/SystemServer( 1024): UI Mode Manager Service
Line 2347: 01-22 11:10:01.331 I/SystemServer( 1024): Backup Service
Line 2393: 01-22 11:10:01.421 I/SystemServer( 1024): AppWidget Service
Line 2394: 01-22 11:10:01.421 I/SystemServer( 1024): Recognition Service
Line 2395: 01-22 11:10:01.421 I/SystemServer( 1024): DiskStats Service
Line 2396: 01-22 11:10:01.421 I/SystemServer( 1024): SamplingProfiler Service
Line 2397: 01-22 11:10:01.421 I/SystemServer( 1024): NetworkTimeUpdateService
Line 2398: 01-22 11:10:01.421 I/SystemServer( 1024): CommonTimeManagementService
Line 2399: 01-22 11:10:01.431 I/SystemServer( 1024): CertBlacklister
Line 2400: 01-22 11:10:01.431 I/SystemServer( 1024): Dreams Service
Line 2401: 01-22 11:10:01.431 I/SystemServer( 1024): IdleMaintenanceService
Line 2402: 01-22 11:10:01.431 I/SystemServer( 1024): Print Service
Line 2403: 01-22 11:10:01.431 I/SystemServer( 1024): Media Router Service
Line 2404: 01-22 11:10:01.431 D/SystemServer( 1024): AccessControlService
Line 2411: 01-22 11:10:01.491 D/SystemServer( 1024): DeviceStateService
Line 2412: 01-22 11:10:01.491 D/SystemServer( 1024): SettingsService
Line 2673: 01-22 11:10:01.921 F/SystemServer( 1024): BOOT FAILURE making Package Manager Service ready
Line 2688: 01-22 11:10:01.921 W/SystemServer( 1024): ***********************************************
2436: 01-22 11:10:01.631 I/ActivityManager( 1024): Start proc com.android.systemui for service com.android.keyguard/.KeyguardService: pid=1108 uid=1000 gids={41000, 3003, 1028, 1015, 1023, 3001, 3002, 1007, 1021, 3004, 3005, 1000, 3009, 1010, 3006, 1035}
01-22 11:10:01.981 I/ActivityManager( 1024): System now ready
Line 2800: 01-22 11:10:01.981 I/SystemServer( 1024): Making services ready
Line 460: 01-22 11:10:03.581 I/ActivityManager( 1024): START u0 {act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10000000 cmp=com.android.launcher3/.Launcher} from pid 0
Line 661: 01-22 11:10:07.441 I/ActivityManager( 1024): Displayed com.android.launcher3/.Launcher: +3s847ms
注意:打印“ActivityManager( 1024): System now ready”之前已经在开始启动SystemUI了,之后再启动Launcher。