Binder是一種基于Client-Server的方式的Android系統(tǒng)進(jìn)程通信方式,是各個(gè)組件通信的橋梁绿店。
Binder通信特點(diǎn):
1吉懊、安全-Android為每個(gè)安裝好的應(yīng)用程序分配了自己的UID并在內(nèi)核中身份標(biāo)示和驗(yàn)證
2、傳輸性能高-數(shù)據(jù)傳輸只拷貝1次
Binder設(shè)計(jì)思想
1惯吕、Binder使用了面向?qū)ο蟮乃枷胩杷荢erver中的對(duì)象,Binder提供了對(duì)Server的操作方法废登。
2、Client中的Binder對(duì)象只是Server中Binder對(duì)象的代理或著理解為引用郁惜,引用可以有很多個(gè)堡距,真實(shí)的對(duì)象只有1個(gè)存在于Server中
Binder通信模型
Binder通信4個(gè)角色:Server甲锡、Client、ServerManager羽戒、Binder驅(qū)動(dòng)
1缤沦、Binder驅(qū)動(dòng)
負(fù)責(zé)進(jìn)程間Binder通信的建立、Binder進(jìn)程間傳遞易稠、Binder引用計(jì)數(shù)管理缸废,數(shù)據(jù)包在進(jìn)程之間的傳遞和一系列的底層支持。
2驶社、ServerManager
Server為Binder實(shí)體取一個(gè)字符并注冊(cè)到 ServerManager
ServerManager負(fù)責(zé)將Server中的Binder對(duì)象轉(zhuǎn)化成Client中對(duì)該Binder的引用Binder是由Binder驅(qū)動(dòng)發(fā)送給Server
3企量、Client
Server向ServerManager注冊(cè)了Binder后,Client可以通過(guò)名字向ServerManager獲得Binder引用亡电,如果有多個(gè)Client請(qǐng)求ServerManager會(huì)創(chuàng)建多個(gè)Binder的引用并發(fā)送給Client
舉個(gè)例子
啟動(dòng)1個(gè)Activity這個(gè)是我們經(jīng)常會(huì)用到,啟動(dòng)Activity過(guò)程其實(shí)也是通過(guò)Binder通信的完成的届巩,我們啟動(dòng)Activity會(huì)調(diào)用startActivity方法,
跟著這個(gè)方法一步一步跟蹤份乒,會(huì)發(fā)現(xiàn)它最后在startActivityForResult里面調(diào)用了Instrument對(duì)象的execStartActivity方法恕汇,接著在這個(gè)函數(shù)里面調(diào)用了ActivityManagerNative類的startActivity方法, ActivityManagerNative實(shí)際上就是ActivityManagerService這個(gè)Server對(duì)象的Binder代理對(duì)象;
最后真正完成啟動(dòng)Activity是ActivityManagerService
啟動(dòng)Activity簡(jiǎn)單過(guò)程:
1或辖、Client 調(diào)用startActivity方法
2瘾英、通過(guò)ServerManager獲取ActivityManagerService的代理ActivityManagerNative(Binder引用)
3、ActivityManagerNative執(zhí)行ActivityManagerService啟動(dòng)Activity