Binder

前言

Android系統(tǒng)是基于Linux系統(tǒng)的,理論上應(yīng)該使用Linux內(nèi)置的IPC方式。Linux中的IPC方式有管道、信號(hào)量、共享內(nèi)存、消息隊(duì)列、Socket,Android使用的Binder機(jī)制不屬于Linux。Android不繼承Linux中原有的IPC方式,而選擇使用Binder,說(shuō)明Binder具有一定的優(yōu)勢(shì)。

什么是Binder

  • Android系統(tǒng)進(jìn)程間通信(IPC---Inter-Process Communication-進(jìn)程間通信)方式之一
  • Linux的驅(qū)動(dòng)/dev/binder (是一個(gè)binder文件)
  • 是安卓系統(tǒng)系統(tǒng)中的Binder類(lèi),實(shí)現(xiàn)了IBinder接口
  • 從Android Framework角度來(lái)說(shuō),Binder是ServiceManager連接各種Manager和相應(yīng)ManagerService的橋梁;

Binder機(jī)制具體有兩層含義:

  • Binder是一種跨進(jìn)程通信(IPC,Inter-Process Communication)的手段;
  • Binder是一種遠(yuǎn)程過(guò)程調(diào)用(RPC,Remote Procedure Call)的手段。

使用Binder的原因

  • 性能方面:
    1.socket: 作為一款通用接口,其傳輸效率低,開(kāi)銷(xiāo)大,主要用在跨網(wǎng)路的進(jìn)程間通信和本機(jī)上進(jìn)程間的低速通信。
    2.消息隊(duì)列和管道:采取存儲(chǔ)-轉(zhuǎn)發(fā)方式,即數(shù)據(jù)先從發(fā)送方緩存區(qū)拷貝到內(nèi)核開(kāi)辟的緩存區(qū)中,然后再?gòu)膬?nèi)核緩存區(qū)拷貝到接收方緩存區(qū),至少有兩次拷貝的過(guò)程。
    3.共享內(nèi)存:雖然無(wú)需拷貝,但控制復(fù)雜,難以使用。
    4.Binder:只需要一次數(shù)據(jù)拷貝,性能上僅次于共享內(nèi)存。

-穩(wěn)定性方面

  • Binder基于C/S架構(gòu),客戶(hù)端(Client)有什么需求就丟給服務(wù)端(Service)去完成,架構(gòu)清晰,職責(zé)明確又相互獨(dú)立,自然穩(wěn)定性好。
  • 共享內(nèi)存:雖然無(wú)需拷貝,但是控制復(fù)雜,難以使用。
  • 從穩(wěn)定的角度講,Binder機(jī)制是優(yōu)于內(nèi)存共享的。

-安全方面

  • 傳統(tǒng)的IPC沒(méi)有任何安全措施,完全依賴(lài)上層協(xié)議來(lái)確保。
  • 傳統(tǒng)的IPC接收方無(wú)法獲得對(duì)方可靠的進(jìn)程用戶(hù)ID/進(jìn)程ID(UID/PID),從而無(wú)法鑒別對(duì)方身份。
最后編輯于
?著作權(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)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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