1. 程式人生 > >零碎筆記之ServiceManager

零碎筆記之ServiceManager

SM是開機的時候通過init.rc檔案啟動的,這就保證了它是系統中第一個註冊成"服務大管家"的Service,所有的service服務都需要在SM中完成註冊。 ServiceManager.getService獲取的物件是本地代理,對映到服務端Service呼叫

作用:

I.提供IBind物件,也就是各個service的引用,供每個程序使用,且對於每個程序來說,該Ibind物件是唯一的。

II.讓各個系統service註冊到servicemanager中。

在ServiceManager中有兩個比較重要的方法:add_service和check_service,系統的service需要通過add_service把自己的資訊註冊到servicemanager中,當需要使用時,通過check_service檢查該service是否存在

ServiceManager完成三件事

1. 開啟Binder裝置,並在記憶體中對映128k的空間

2. 告訴Binder驅動程式,自己是Binder上下文管理者

3. 進入迴圈,不停去讀Binder裝置,看是否有對service的請求,如果有的話就去呼叫svcmgr_handller函式回撥處理請求。