Android系統(tǒng)啟動(dòng)流程(三)解析SystemServer進(jìn)程啟動(dòng)過(guò)程
1.Zygote啟動(dòng)SystemServer進(jìn)程
在上一篇文章中我們講到在ZygoteInit.java的startSystemServer函數(shù)中啟動(dòng)了SyetemServer進(jìn)程,如下所示。
frameworks/base/core/java/com/android/internal/os/ZygoteInit.java
private static boolean startSystemServer(String abiList, String socketName) throws MethodAndArgsCaller, RuntimeException { ... if (pid == 0) { if (hasSecondZygote(abiList)) { waitForSecondaryZygote(socketName); } handleSystemServerProcess(parsedArgs); } return true; }
2.SystemServer進(jìn)程啟動(dòng)過(guò)程
啟動(dòng)Binder線程池
3.解析SyetemServer進(jìn)程
我們先來(lái)查看SystemServer的main函數(shù):
frameworks/base/services/java/com/android/server/SystemServer.java
public static void main(String[] args) { new SystemServer().run(); } main函數(shù)中只調(diào)用了SystemServer的run函數(shù),如下所示。 private void run() { ... System.loadLibrary("android_servers");//1 ... mSystemServiceManager = new SystemServiceManager(mSystemContext);//2 LocalServices.addService(SystemServiceManager.class, mSystemServiceManager); ... try { Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, "StartServices"); startBootstrapServices();//3 startCoreServices();//4 startOtherServices();//5 } catch (Throwable ex) { Slog.e("System", "******************************************"); Slog.e("System", "************ Failure starting system services", ex); throw ex; } finally { Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER); } ... }
4.總結(jié)SyetemServer進(jìn)程
SyetemServer在啟動(dòng)時(shí)做了如下工作:
1.啟動(dòng)Binder線程池,這樣就可以與其他進(jìn)程進(jìn)行通信。
2.創(chuàng)建SystemServiceManager用于對(duì)系統(tǒng)的服務(wù)進(jìn)行創(chuàng)建、啟動(dòng)和生命周期管理。
3.啟動(dòng)各種系統(tǒng)服務(wù)。
posted on 2016-12-23 01:56 安卓筆記俠 閱讀(1147) 評(píng)論(0) 收藏 舉報(bào)
浙公網(wǎng)安備 33010602011771號(hào)