android 开发艾特功能,Android Binder
Binder 是一種進程間通信機制,基于開源的 OpenBinder 實現;OpenBinder 起初由 Be Inc. 開發,后由 Plam Inc. 接手。從字面上來解釋 Binder 有膠水、粘合劑的意思,顧名思義就是粘和不同的進程,使之實現通信。
為什么 Activity 間傳遞對象需要序列化?
Activity 的啟動流程是什么樣的?
四大組件底層的通信機制是怎樣的?
AIDL 內部的實現原理是什么?
插件化編程技術應該從何學起?等等...
我們知道 Android 應用程序是由 Activity、Service、Broadcast Receiver 和 Content Provide 四大組件中的一個或者多個組成的。有時這些組件運行在同一進程,有時運行在不同的進程。這些進程間的通信就依賴于 Binder IPC 機制。不僅如此,Android 系統對應用層提供的各種服務如:ActivityManagerService、PackageManagerService 等都是基于 Binder IPC 機制來實現的。
Android 系統是基于 Linux 內核的,Linux 已經提供了管道、消息隊列、共享內存和 Socket 等 IPC 機制。那為什么 Android 還要提供 Binder 來實現 IPC 呢?主要是基于性能、穩定性和安全性幾方面的原因。
性能
首先說說性能上的優勢。Socket 作為一款通用接口,其傳輸效率低,開銷大,主要用在跨網絡的進程間通信和本機上進程間的低速通信。消息隊列和管道采用存儲-轉發方式,即數據先從發送方緩存區拷貝到內核開辟的緩存區中,然后再從內核緩存區拷貝到接收方緩存區,至少有兩次拷貝過程。共享內存雖然無需拷貝,但控制復雜,難以使用。Binder 只需要一次數據拷貝,性能上僅次于共享內存。
IPC方式
數據拷貝次數
共享內存
0
Binder
1
Socket/管道/消息隊列
2
穩定性
再說說穩定性,Binder 基于 C/S 架構,客戶端(Client)有什么需求就丟給服務端(Server)去完成,架構清晰、職責明確又相互獨立,自然穩定性更好。共享內存雖然無需拷貝,但是控制負責,難以使用。從穩定性的角度講,Binder 機制是優于內存共享的。
安全性
另一方面就是安全性。Android 作為一個開放性的平臺,市場上有各類海量的應用供用戶選擇安裝,因此安全性對于 Android 平臺而言極其重要。作為用戶當然不希望我們下載的 APP 偷偷讀取我的通信錄,上傳我的隱私數據,后臺偷跑流量、消耗手機電量。傳統的 IPC 沒有任何安全措施,完全依賴上層協議來確保。首先傳統的 IPC 接收方無法獲得對方可靠的進程用戶ID/進程ID(UID/PID),從而無法鑒別對方身份。Android 為每個安裝好的 APP 分配了自己的 UID,故而進程的 UID 是鑒別進程身份的重要標志。傳統的 IPC 只能由用戶在數據包中填入 UID/PID,但這樣不可靠,容易被惡意程序利用。可靠的身份標識只有由 IPC 機制在內核中添加。其次傳統的 IPC 訪問接入點是開放的,只要知道這些接入點的程序都可以和對端建立連接,不管怎樣都無法阻止惡意程序通過猜測接收方地址獲得連接。同時 Binder 既支持實名 Binder,又支持匿名 Binder,安全性高。
基于上述原因,Android 需要建立一套新的 IPC 機制來滿足系統對穩定性、傳輸性能和安全性方面的要求,這就是 Binder。
最后用一張表格來總結下 Binder 的優勢:
優勢
描述
性能
只需要一次拷貝數據,性能上僅次于共享內存
穩定性
基于C/S架構,職責明確,架構清晰,穩定性好
安全性
為每個進程分配UID,進程的UID是區分進程身份的重要標志
基本概念介紹
這里我們先從 Linux 中進程間通信涉及的一些基本概念開始介紹,然后逐步展開,向大家說明傳統的進程間通信的原理。
Linux基本概念介紹.png
上圖展示了 Liunx 中跨進程通信涉及到的一些基本概念:
進程隔離
進程空間劃分:用戶空間(User Space)/內核空間(Kernel Space)
系統調用:用戶態/內核態
Linux 下的傳統 IPC 通信原理
傳統的IPC通信原理
這種傳統的 IPC 通信方式有兩個問題:
1.性能低下,一次數據傳遞需要經歷:內存緩存區 --> 內核緩存區 --> 內存緩存區,需要 2 次數據拷貝;
2.接收數據的緩存區由數據接收進程提供,但是接收進程并不知道需要多大的空間來存放將要傳遞過來的數據,因此只能開辟盡可能大的內存空間或者先調用 API 接收消息頭來獲取消息體的大小,這兩種做法不是浪費空間就是浪費時間。
總結
以上是生活随笔為你收集整理的android 开发艾特功能,Android Binder的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 闪回表操作语法+使用闪回删除
- 下一篇: android sina oauth2.