系統服務的啟動過程是從systemserver的main函式開始的:
public static void main(string args)
該方法呼叫之後,run方法就會執行。run方法主要作以下工作:
...
//1、 設定系統屬性,例如國家語言等
systemproperties.set("persist.sys.timezone", "gmt");
systemproperties.set("persist.sys.country", "");
... //2、 開啟訊息迴圈
// prepare the main looper thread (this thread).
looper.preparemainlooper();
... // initialize the system context.
// 3、建立系統上下文
createsystemcontext();
// create the system service manager.
msystemservicemanager = new systemservicemanager(msystemcontext);
msystemservicemanager.setstartinfo(mruntimerestart,
mruntimestartelapsedtime, mruntimestartuptime);
localservices.addservice(systemservicemanager.class,
msystemservicemanager);
... // 4、啟動各種系統服務,引導服務、核心服務、其他服務
startbootstrapservices();
startcoreservices();
startotherservices();
... // loop forever.
looper.loop();
throw new runtimeexception("main thread loop unexpectedly exited");
1、會設定一些系統配置屬性,例如語言,時區,國家等等。
2、開啟訊息迴圈。安卓是基於訊息事件推動的,且是多執行緒的。主線程系統會幫我們建立looper物件
3、建立上下文。
private void createsystemcontext()
可以看到,例項化了activitythread,並通過它獲取到上下文,然後設定一些系統主題樣式,那麼activitythread是如何來的呢?
public static activitythread systemmain() else
activitythread thread = new activitythread();
thread.attach(true, 0);
return thread;
}
其實就是new了乙個activitythread,new出來的只是單純的乙個類,很明顯,它的功能職責是在attach裡面被賦予的。需要注意,第乙個引數設定為true,然後跟進去看看:
if (!system)
});} else
4、啟動各種系統服務,如引導服務,核心服務,其他服務
4.1、引導服務:ams,pms包管理器等
4.2、核心服務:電池等
4.3、其他服務:wms,藍芽等
首先會例項化systemservermanager管理類,然後呼叫它的startservice方法。
public t startservice(classserviceclass)
public void startservice(@nonnull final systemservice service)
可以看到通過反射先例項化乙個具體服務,然後註冊該服務,最後呼叫該服務的onstart()方法。需要注意的是註冊服務是將所有的系統服務新增到乙個list中進行註冊,然後呼叫該服務的話,就從集合中去獲取即可。 mysql啟動過程長 mysql啟動過程
mysql啟動過程經過以下順序 1.mysql讀取配置檔案的順序 讀取順序 etc my.cnf etc mysql my.cnf usr etc my.cnf my.cnf 2.mysql啟動方式 mysql啟動方式有三種 mysqld mysqld safe mysqld multi 主要用於多...
Linux啟動過程
1 開啟 pc電源 pc加電後,乙個特殊的硬體電路會觸發 cpu 的 reset 腳的邏輯值,然後一些 cpu 暫存器,如 cs eip 等被給定乙個值,接著 cpu 跳轉到乙個固定位址開始執行 bios 2 bios 自檢,按設定的裝置啟動 bios 對硬體進行一系列徹底的檢查,如 cpu 型別 ...
Flex 啟動過程
2008 11 16 11 58 然後才是 通常我們所說的flex應用程式,本質上來說是基於flex框架 採用actionscript 3.0編寫的flash應用程式,從這一點來說,它和普通的flash應用程式沒有任何差別。相對來說,傳統的使用flash ide 如flash cs3 建立flash...