Android本地服務(Native Service)與Framework層服務接口相互調用

我們知道本地服務與Framework層服務都是基於Binder框架實現的,本地系統服務採用Binder進程間通信庫,Framework系統服務利用AIDL最簡單(當然也可以自己寫),但是他們都是基於Binder框架實現,所以他們的接口是可以相互調用的,這裏分兩種情況:C/C++層調用Framework層服務、java層調用本地服務(Native Service)。

一、C/C++層調用Framework層服務

假設現在有一個Framework層服務PMService,它包含的接口如下:


如果想在本地C++語言中調用服務中setVal和 getVal兩個接口,那麼首先根據PMService服務在本地創建該服務代理接口,如下:


那麼本地調用該PMService服務方法如下:

第一步獲取PMService服務binder對象,第2步將binder對象轉化成服務接口,第3步調用服務接口,這樣就實現了本地服務調用framework服務了。

二、java層調用本地服務

java層如下想調用本地系統服務,第一種方法是採用jni,還有一種簡單方法,就是用aidl實現本地服務的代理接口,比如現在有本地系統服務ZpmService,,其接口定爲爲:


ZpmService如何實現就不貼代碼了。然後根據接口新建一個aidl文件,生成ZpmService服務的代理接口:


再編譯一下Android源碼.使用時的調用方法如下:








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