SystemServer啟動過程

2021-09-25 12:26:38 字數 2177 閱讀 8843

系統服務的啟動過程是從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...