關鍵詞:Binder 連接池 / BinderPool / AIDL / Service /
AIDL 是最常用的進程間通信方式,先溫故一下它的大致流程:(1)創建一個 Service 和一個 AIDL 接口;(2)創建一個類,繼承於 AIDL 接口中的 Stub 類,並實現 Stub 中的抽象方法;(3)在 Service 中的 onBind 方法中返回這個類的對象;(4)客戶端綁定服務端的 Service,建立連接後訪問遠程服務端;
正文 #
本次筆記的梳理主要是有關 Binder 連接池,需要知道以下幾點:
- 隨着 AIDL 數量的增加,我們並不能無限制的增加 Service,作爲四大組件之一的 Service 本身也是一種系統資源,我們需要減少 Service 的數量,將所有的 AIDL 放在同一個 Service 中去管理;
- Binder 連接池的主要作用就是將每個業務模塊的 Binder 請求統一轉發到遠程 Service 中去執行,從而避免了重複創建 Service 的過程;
- 只需要創建一個 Service 即可完成多個 AIDL 接口的工作;
- BinderPool 是一個單例實現,在同一個進程中只會初始化一次,所以提前初始化 BinderPool,可以優化程序的體驗,比如放在 Application 裏面;
- BinderPool 中有斷線重連的機制,當遠程服務意外終止時,BinderPool 會重新建立連接;
- BinderPool 能夠極大的提高 AIDL 的開發效率,並且可以避免大量的 Service 創建,因此,建議在 AIDL 開發工作中引入 BinderPool 機制;
End.
Note by HF.
Learn from 《Android 開發藝術探索》