簡介
SystemServer的進程名實際上叫做“system_server”,通常簡稱為SS。
系統中的服務駐留在其中,常見的比如WindowManagerServer(Wms)、ActivityManagerSystemService(AmS)、 PackageManagerServer(PmS)等,這些系統服務都是以一個線程的方式存在於SystemServer進程中。
SS是由Zygote通過Zygote.forkSystemServer函數fork誕生出來的。與Zygote生死與共.SS誕生后,便和生父Zygote分道揚鑣,它有了自己的歷史使命。
ZygoteInit分裂產生的SS,其實就是為了調用com.android.server.SystemServer(SystemServer.java)的main函數:其中主要調用init1,init2函數.
- init1()是native函數,啟動了 c++運行時庫,如:sqllite,OpenGL ES等,然后把調用線程加入Binder通信中。
- init2在Java層,就是單獨創建一個線程,用以啟動系統各項服務,如:ActivityManagerService,PowerManagerService,BatteryService,WindowManagerService...注意這些服務都是線程,在SystemServer進程中.
SystemServer調用流程

SystemServer中啟動服務列表
| 服務類名稱 |
作用描述 |
啟動模式 |
| EntropyService | 提供偽隨機數 | 1.0 |
| PowerManagerService | 電源管理服務 | 1.2/3 |
| ActivityManagerService | 最核心的服務之一,管理 Activity | 自定義 |
| TelephonyRegistry | 通過該服務注冊電話模塊的事件響應,比如重啟、關閉、啟動等 | 1.0 |
| PackageManagerService | 程序包管理服務 | 3.3 |
| AccountManagerService | 賬戶管理服務,是指聯系人賬戶,而不是 Linux 系統的賬戶 | 1.0 |
| ContentService | ContentProvider 服務,提供跨進程數據交換 | 3.0 |
| BatteryService | 電池管理服務 | 1.0 |
| LightsService | 自然光強度感應傳感器服務 | 1.0 |
| VibratorService | 震動器服務 | 1.0 |
| AlarmManagerService | 定時器管理服務,提供定時提醒服務 | 1.0 |
| WindowManagerService | Framework 最核心的服務之一,負責窗口管理 | 3.3 |
| BluetoothService | 藍牙服務 | 1.0 + |
| DevicePolicyManagerService | 提供一些系統級別的設置及屬性 | 1.3 |
| StatusBarManagerService | 狀態欄管理服務 | 1.3 |
| ClipboardService | 系統剪切板服務 | 1.0 |
| InputMethodManagerService | 輸入法管理服務 | 1.0 |
| NetStatService | 網絡狀態服務 | 1.0 |
| NetworkManagementService | 網絡管理服務 | NMS.create() |
| ConnectivityService | 網絡連接管理服務 | 2.3 |
| ThrottleService | 暫不清楚其作用 | 1.3 |
| AccessibilityManagerService | 輔助管理程序截獲所有的用戶輸入,並根據這些輸入給用戶一些額外的反饋,起到輔助的效果 | 1.0 |
| MountService | 掛載服務,可通過該服務調用 Linux 層面的 mount 程序 | 1.0 |
| NotificationManagerService | 通知欄管理服務, Android 中的通知欄和狀態欄在一起,只是界面上前者在左邊,后者在右邊 | 1.3 |
| DeviceStorageMonitorService | 磁盤空間狀態檢測服務 | 1.0 |
| LocationManagerService | 地理位置服務 | 1.3 |
| SearchManagerService | 搜索管理服務 | 1.0 |
| DropBoxManagerService | 通過該服務訪問 Linux 層面的 Dropbox 程序 | 1.0 |
| WallpaperManagerService | 牆紙管理服務,牆紙不等同於桌面背景,在 View 系統內部,牆紙可以作為任何窗口的背景 | 1.3 |
| AudioService | 音頻管理服務 | 1.0 |
| BackupManagerService | 系統備份服務 | 1.0 |
| AppWidgetService | Widget 服務 | 1.3 |
| RecognitionManagerService | 身份識別服務 | 1.3 |
| DiskStatsService | 磁盤統計服務 | 1.0 |
from:http://www.cnblogs.com/sjjg/p/4821161.html
1Android是基於Linux的一個操作系統,它可以分為五層,下面是它的層次架構圖,可以記一下,因為后面應該會總結到SystemServer這些Application Framework層的東西
Android的五層架構從上到下依次是:應用層,應用框架層,庫層,運行時層,Linux內核層。
而在Linux中,它的啟動可以歸為一下幾個流程:
Boot Loader——>初始化內核——>。。。。。。
當初始化內核之后,就會啟動一個相當重要的祖先進程,也就是init進程,在Linux中所有的進程都是由init進程直接或間接fork出來的。
而對於Android來說,前面的流程都是一樣的,而當init進程創建之后,會fork出一個Zygote進程,這個進程是所有Java進程的父進程。我們知道,Linux是基於C的,而Android是基於Java的(當然底層也是C)。所以這里就會fork出一個Zygote Java進程用來fork出其他的進程。【斷點1】
總結到了這里就提一下之后會談到的幾個非常重要的對象以及一個很重要的概念。
- ActivityManagerServices(AMS):它是一個服務端對象,負責所有的Activity的生命周期,ActivityThread會通過Binder與之交互,而AMS與Zygote之間進行交互則是通過Socket通信(IPC通信在之后會總結到)
- ActivityThread:它也就是我們俗稱的UI線程/主線程,它里面存在一個main()方法,這也是APP的真正入口,當APP啟動時,就會啟動ActivityThread中的main方法,它會初始化一些對象,然后開啟消息循環隊列(之后總結),之后就會Looper.loop死循環,如果有消息就執行,沒有就等着,也就是事件驅動模型(edt)的原理。
- ApplicationThread:它實現了IBinder接口,是Activity整個框架中客戶端和服務端AMS之間通信的接口,同時也是ActivityThread的內部類。這樣就有效的把ActivityThread和AMS綁定在一起了。
- Instrumentation:這個東西我把它理解為ActivityThread的一個工具類,也算是一個勞動者吧,對於生命周期的所有操作例如onCreate最終都是直接由它來執行的。
Android系統中的客戶端和服務器的概念
在Android系統中其實也存在着服務器和客戶端的概念,服務器端指的就是所有App共用的系統服務,比如上面的AMS,PackageManagerService等等,這些系統服務是被所有的App共用的,當某個App想要實現某個操作的時候,就會通知這些系統服務。
繼續斷點1
當Zygote被初始化的時候,會fork出System Server進程,這個進程在整個的Android進程中是非常重要的一個,地位和Zygote等同,它是屬於Application Framework層的,Android中的所有服務,例如AMS, WindowsManager, PackageManagerService等等都是由這個SystemServer fork出來的。所以它的地位可見一斑。
而當System Server進程開啟的時候,就會初始化AMS,同時,會加載本地系統的服務庫,創建系統上下文,創建ActivityThread及開啟各種服務等等。而在這之后,就會開啟系統的Launcher程序,完成系統界面的加載與顯示。【斷點2】
from:http://www.cnblogs.com/zyanrong/p/5661114.html
