Android基本框架學習之defaultServiceManager

Android基本框架學習之defaultServiceManager

這兩天看了一下dumpsys和dumpstate,對Android系統中各種系統Service的實現框架不是很明白,以下簡單的描述了一下這兩天關於Android的系統Service的一些實現和具體代碼位置。


具體組件的合作情況如下:

    Binder的一系列接口和後臺驅動是信息交換的基礎

    service_manager是提供一箇中轉層/管理層給各個java端的service交換信息的通道,它起到承上(java層/dalvik)啓下(binder驅動/硬件信息)的作用。

    而Java層主要通過ServiceManager.java管理,並通過ServiceManagerNative.java提供的接口與binder下的IServiceManager.cpp交互,IServiceManager.cpp又通過Binder機制與service_manager交互達到從Java/dalvik到Linux進程中的各種Service管理(註冊/註銷/查詢)!




例子:

所有用dumpsys能夠看到的Service都是通過ServiceManger提供的add函數把各自提供的service提供統一的接口給ServiceManger管理,並通過Binder與相應的Component相交互.

有一些與硬件狀態相關的service如,wifi,phone,就對應有一個如WifiService,在mydroid/frameworks/base/core/services/java/com/android/server/ConnectivityService.java中被註冊到ServiceManger中.



相關代碼位置:

mydroid/framework/base/libs/binder/xxxx,其中IServiceManager.cpp中是接收從Java的ServerManager發來的各種請求(addserver, checkserver,...),與Binder Driver通訊的模塊.

mydroid/frameworks/base/core/java/android/os/ServiceManager.java和ServiceManagerNative.java

mydroid/frameworks/base/core/services/java/com/android/server/SystemServer.java(大部分的系統service都在這裏被註冊)

而mydroid/frameworks/base/cmds/servicemanager/service_mangaer.c是一個被init.rc中使用到的命令,用來在開機時啓動service_manager這個類似daemon的東西。


參考資料:

有關Service Manager的一篇文章,針對Binder驅動和Service_manager的闡述,但是沒有提到Java層的各種Service是如何通過Binder和Service_manager提供接口給用戶層和Java層的Sysem使用。

http://my.unix-center.net/~Simon_fu/?p=875

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章