Android系統(tǒng)啟動(dòng)(四)-SystemServer篇

從上篇的Zygote學(xué)習(xí)中,了解到Zygote進(jìn)程最后啟動(dòng)了SyetemServer進(jìn)程,那么這篇文章就來分析下SystemServer。

一、SystemServer啟動(dòng)流程

這個(gè)過程在zygote進(jìn)程中,主要包括這么幾個(gè)內(nèi)容:

1.1 Zygote fork SystemServer

1.2 當(dāng)system_server進(jìn)程創(chuàng)建失敗時(shí),將會(huì)重啟zygote進(jìn)程:

  • 當(dāng)kill system_server進(jìn)程后,只重啟zygote64和system_server,不重啟zygote;
  • 當(dāng)kill zygote64進(jìn)程后,只重啟zygote64和system_server,也不重啟zygote;
  • 當(dāng)kill zygote進(jìn)程,則重啟zygote、zygote64以及system_server。

1.3 Zygote通過信號(hào)處理函數(shù)SigChldHandler監(jiān)聽所有子進(jìn)程的存亡

static void SigChldHandler(int /*signal_number*/) {
   pid_t pid;
   int status;
   //Zygote監(jiān)聽所有子進(jìn)程的存亡
  while ((pid = waitpid(-1, &status, WNOHANG)) > 0) {
   //某一個(gè)子進(jìn)程掛了
  if (WIFSIGNALED(status)) {
         if (WTERMSIG(status) != SIGKILL) {
           ALOGI("Process %d exited due to signal (%d)", pid, WTERMSIG(status));
         }
       }
   //如果掛掉的是SystemServer
        if (pid == gSystemServerPid) {
          ALOGE("Exit zygote because system server (%d) has terminated", pid);
         kill(getpid(), SIGKILL);   //Zygote自殺
        }
      }
  }

二、SystemServer啟動(dòng)后的工作

關(guān)鍵流程說明:

ZygoteInit.startSystemServer()

fork 子進(jìn)程 system_server,進(jìn)入 system_server 進(jìn)程。

ZygoteInit.handleSystemServerProcess()

設(shè)置當(dāng)前進(jìn)程名為“system_server”,創(chuàng)建 PathClassLoader 類加載器。

RuntimeInit.zygoteInit()

重定向 log 輸出,通用的初始化(設(shè)置默認(rèn)異常捕捉方法,時(shí)區(qū)等),初始化 Zygote -> nativeZygoteInit()。

app_main::onZygoteInit()

proc->startThreadPool(); 啟動(dòng)Binder線程池,這樣就可以與其他進(jìn)程進(jìn)行通信。

ZygoteInit.main()

開啟 DDMS 功能,preload() 加載資源,預(yù)加載 OpenGL,調(diào)用 SystemServer.main() 方法。

SystemServer.main()

先初始化 SystemServer 對(duì)象,再調(diào)用對(duì)象的 run() 方法。

SystemServer.run()  
          createSystemContext
          startBootstrapServices(); 
          startCoreServices(); 
          startOtherServices(); 
          Looper.loop();

三、系統(tǒng)服務(wù)

startBootstrapServices:引導(dǎo)服務(wù)

服務(wù) 作用
Installer 系統(tǒng)安裝apk時(shí)的一個(gè)服務(wù)類,啟動(dòng)完成Installer服務(wù)之后才能啟動(dòng)其他的系統(tǒng)服務(wù)
ActivityManagerService 負(fù)責(zé)四大組件的啟動(dòng)、切換、調(diào)度。
PowerManagerService 計(jì)算系統(tǒng)中和Power相關(guān)的計(jì)算,然后決策系統(tǒng)應(yīng)該如何反應(yīng)
LightsService 管理和顯示背光LED
DisplayManagerService 用來管理所有顯示設(shè)備
UserManagerService 多用戶模式管理
SensorService 為系統(tǒng)提供各種感應(yīng)器服務(wù)
PackageManagerService 用來對(duì)apk進(jìn)行安裝、解析、刪除、卸載等等操作

startCoreServices:核心服務(wù)

服務(wù) 作用
BatteryService 管理電池相關(guān)的服務(wù)
UsageStatsService 收集用戶使用每一個(gè)APP的頻率、使用時(shí)常
WebViewUpdateService WebView更新服務(wù)

startOtherServices:其他服務(wù)

服務(wù) 作用
CameraService 攝像頭相關(guān)服務(wù)
AlarmManagerService 全局定時(shí)器管理服務(wù)
InputManagerService 管理輸入事件
WindowManagerService 窗口管理服務(wù)
VrManagerService VR模式管理服務(wù)
BluetoothService 藍(lán)牙管理服務(wù)
NotificationManagerService 通知管理服務(wù)
DeviceStorageMonitorService 存儲(chǔ)相關(guān)管理服務(wù)
LocationManagerService 定位管理服務(wù)
AudioService 音頻相關(guān)管理服務(wù)
….

四、SystemServiceManager分析

從名字就很明顯知道SystemServiceManager是系統(tǒng)服務(wù)管理類,簡單了解兩個(gè)方法:
4.1 startService函數(shù)

很簡單,就是通過反射創(chuàng)建服務(wù)對(duì)象,并調(diào)用其onStart( )方法啟動(dòng)。

4.2 startBootPhase函數(shù)

Systemserver會(huì)將設(shè)備啟動(dòng)分成幾個(gè)階段,每個(gè)階段service通過繼承SytemService實(shí)現(xiàn)的onBootPhase方法來做一些對(duì)應(yīng)的操作,相當(dāng)于一個(gè)回調(diào)。

參考:
http://liuwangshu.cn/framework/booting/3-syetemserver.html
http://gityuan.com/2016/02/20/android-system-server-1/
http://gityuan.com/2016/02/20/android-system-server-2/

系列文章:
Android系統(tǒng)啟動(dòng)(一)-開篇
Android系統(tǒng)啟動(dòng)(二)-Init篇
Android系統(tǒng)啟動(dòng)(三)-Zygote篇
Android系統(tǒng)啟動(dòng)(四)-SystemServer篇
Android系統(tǒng)啟動(dòng)(五)-ActivityManagerService篇
Android系統(tǒng)啟動(dòng)(六)-Launcher篇

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請(qǐng)通過簡信或評(píng)論聯(lián)系作者。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容