開始介紹Binder連接池之前射沟,我們先大致回顧一下AIDL的使用流程:首先創(chuàng)建AIDL接口,接著創(chuàng)建一個(gè)類實(shí)現(xiàn)接口中的Stub類并實(shí)現(xiàn)Stub中的抽象方法饮戳,在Service的onBind方法中返回這個(gè)類的對(duì)象澳迫,之后客戶端就可以綁定服務(wù)端的Service蛾洛,建立連接后就能訪問服務(wù)端的方法。
更多AIDL使用方法Android深入理解IPC機(jī)制(三) Android中的幾種IPC方式
當(dāng)項(xiàng)目越來越龐大饭庞,需要十個(gè)甚至上百個(gè)AIDL來支撐業(yè)務(wù)需求戒悠,我們肯定不能創(chuàng)建100個(gè)Service,因?yàn)镾ervice本身就是四大組件之一舟山,是一種系統(tǒng)資源绸狐。為了解決這個(gè)問題,我們需要減少Service的數(shù)量累盗,可以將所有的AIDL都放在一個(gè)Service中去管理寒矿。
上面提到的模式的工作機(jī)制是這樣的:
- 每個(gè)業(yè)務(wù)有自己的AIDL接口和實(shí)現(xiàn)方法,但是不同業(yè)務(wù)之間是不能有耦合的幅骄,實(shí)現(xiàn)細(xì)節(jié)要單獨(dú)開來,然后向服務(wù)端提供自己的唯一標(biāo)識(shí)和對(duì)應(yīng)的Binder對(duì)象
- 服務(wù)端負(fù)責(zé)提供一個(gè)queryBinder 接口本今,這個(gè)接口能根據(jù)業(yè)務(wù)的特征返回相應(yīng)的Binder對(duì)象給他們拆座,不同的業(yè)務(wù)模塊拿到所需要的Binder對(duì)象就可以調(diào)用對(duì)應(yīng)的服務(wù)端方法。由此可見冠息,Binder連接池的作用就是將每個(gè)Binder請(qǐng)求轉(zhuǎn)發(fā)到遠(yuǎn)程Service中去執(zhí)行挪凑,避免重復(fù)創(chuàng)建Service。
為了更容易理解它的工作原理逛艰,我們可以把遠(yuǎn)程Service看成是一個(gè)Map容器躏碳,遠(yuǎn)程Service的queryBinder方法就類似于Map的get方法。每個(gè)AIDL和它對(duì)應(yīng)的Binder對(duì)象就像是一個(gè)插入到Map的鍵值對(duì)散怖,當(dāng)某個(gè)業(yè)務(wù)需要使用自己的Binder對(duì)象的時(shí)候菇绵,就可以通過AIDL所對(duì)應(yīng)的唯一識(shí)別碼從Map內(nèi)獲取到對(duì)應(yīng)的Binder對(duì)象。
推薦閱讀
Android深入理解IPC機(jī)制(一)基礎(chǔ)知識(shí)概要
Android深入理解IPC機(jī)制(二)淺談Binder
Android深入理解IPC機(jī)制(三) Android中的幾種IPC方式
參考書籍
《Android 開發(fā)藝術(shù)探索》