日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android 开发艾特功能,Android Binder

發布時間:2023/12/10 Android 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。