[001]自己來(lái)實(shí)現(xiàn)Binder機(jī)制

前言

還記得我剛工作半年時(shí)候,因?yàn)楣镜募軜?gòu)調(diào)整,我從應(yīng)用組換到了Framework組,當(dāng)時(shí)我的領(lǐng)導(dǎo)讓我看一下Binder,當(dāng)時(shí)也是一臉悶逼,各種百度,各種買(mǎi)書(shū)來(lái)看,但是總是迷迷糊糊,由于對(duì)JNI和C語(yǔ)言的欠缺,一直沒(méi)有真正的搞明白,工作兩年之后才算整理上理解,接下來(lái)給各位講講我的理解。

Android系統(tǒng)為什么需要Binder機(jī)制

因?yàn)楦鱾€(gè)進(jìn)程都在自己的虛擬地址空間,進(jìn)程A無(wú)法直接調(diào)用進(jìn)程B的方法。為了能讓進(jìn)程A調(diào)用進(jìn)程B的方法,有什么辦法,我們自己也可以想想。我自己想了一個(gè)簡(jiǎn)單粗暴的方法,進(jìn)程B在SD卡中創(chuàng)建一個(gè)文件"sdcard/B",然后每隔一秒,去讀這個(gè)文件,進(jìn)程A寫(xiě)一個(gè)方法名和參數(shù)到SD卡中的文件"sdcard/B",進(jìn)程A每隔1秒去讀這個(gè)文件"sdcard/B",進(jìn)程B發(fā)現(xiàn)文件"sdcard/B"內(nèi)容有更新,讀到了方法名和參數(shù),然后根據(jù)方法名調(diào)進(jìn)程B的方法,再將返回的結(jié)果寫(xiě)到這個(gè)文件"sdcard/B"中。進(jìn)程A發(fā)現(xiàn)文件"sdcard/B"內(nèi)容有更新就讀取返回結(jié)果,這樣子就完成了一次跨進(jìn)程通信。雖然我這個(gè)方案,從易用性和性能來(lái)說(shuō)都有一點(diǎn)差,但是Binder機(jī)制本質(zhì)上就是類(lèi)似這樣子的方式。

Binder機(jī)制中的四大重要組成部分

1.Binder驅(qū)動(dòng)
2.ServiceManager(本質(zhì)上就是Server端,世界上第一個(gè)Server端)
3.Server端
4.Client端

1.Binder驅(qū)動(dòng)

這里有很多概念,牽涉到源碼很多,我不想和各位聊聊源碼,在上一個(gè)小編自己實(shí)現(xiàn)的跨進(jìn)行通信方案,能否有一定的改進(jìn),創(chuàng)建SD卡的文件,讀寫(xiě)SD卡的文件,監(jiān)聽(tīng)SD卡的文件,SD卡的文件格式,這些東西能否形成一個(gè)套通用的接口方便各個(gè)進(jìn)程來(lái)使用呢,其實(shí)Binder驅(qū)動(dòng)就是這個(gè)通用的接口。

2.ServiceManager

大家發(fā)現(xiàn)一個(gè)問(wèn)題沒(méi)有,進(jìn)程A要調(diào)用進(jìn)程B,首先要找到進(jìn)程B在SD中創(chuàng)建的文件,那進(jìn)程A如何找到這個(gè)文件呢?這個(gè)Binder機(jī)制,早就幫你考慮好了,開(kāi)機(jī)會(huì)啟動(dòng)一個(gè)進(jìn)程,叫做ServiceManager(SM),SM會(huì)創(chuàng)建第一個(gè)SD文件(這個(gè)文件的地址是sdcard/0,固定),并對(duì)這個(gè)文件進(jìn)行監(jiān)聽(tīng)

3.Server端

進(jìn)程B就是Server端,在進(jìn)程B在創(chuàng)建文件"sdcard/B"后,把注冊(cè)進(jìn)程B信息和文件名,寫(xiě)到SM的文件中,SM把進(jìn)程B的信息和文件名存在SM進(jìn)程中內(nèi)部的一個(gè)紅黑樹(shù),方便查詢。

4.Client端

進(jìn)程A就是Client端,當(dāng)進(jìn)程A要調(diào)用進(jìn)程B的方法時(shí)候,首先進(jìn)程A去把自己的查詢B的請(qǐng)求寫(xiě)到SM的文件中,SM根據(jù)進(jìn)程A的請(qǐng)求,返回進(jìn)程B的信息和文件名,然后A根據(jù)進(jìn)程B的信息和文件名去把方法名和參數(shù)寫(xiě)到進(jìn)程B的"sdcard/B"文件中,然后進(jìn)行一個(gè)跨進(jìn)程通信。

小結(jié)

小編自己實(shí)現(xiàn)一個(gè)類(lèi)Binder的機(jī)制,并提出了四個(gè)重要概念,接下來(lái)小編會(huì)繼續(xù)來(lái)分析這四個(gè)重要概念,敬請(qǐng)期待。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容