⑴ Carson帶你學android:全面剖析Binder跨進程通信原理
從而全方位地介紹 Binder ,希望你們會喜歡。
在本文的講解中,按照 大角度 -> 小角度 去分析 Binder ,即:
從而全方位地介紹 Binder ,希望你們會喜歡。
在講解 Binder 前,我們先了解一些 Linux 的基礎知識
具體請看文章: 操作系統:圖文詳解 內存映射
Binder 跨進程通信機制 模型 基於 Client - Server 模式
此處重點講解 Binder 驅動作用中的跨進程通信的原理:
原因:
所以,原理圖可表示為以下:
所以,在進行跨進程通信時,開發者只需自定義 Client & Server 進程 並 顯式使用上述3個步驟,最終藉助 Android 的基本架構功能就可完成進程間通信
注冊服務後, Binder 驅動持有 Server 進程創建的 Binder 實體
此時, Client 進程與 Server 進程已經建立了連接
Client 進程 根據獲取到的 Service 信息( Binder 代理對象),通過 Binder 驅動 建立與 該 Service 所在 Server 進程通信的鏈路,並開始使用服務
步驟1: Client 進程 將參數(整數a和b)發送到 Server 進程
步驟2: Server 進程根據 Client 進要求 調用 目標方法(即加法函數)
步驟3: Server 進程 將目標方法的結果(即加法後的結果)返回給 Client 進程
對比 Linux ( Android 基於 Linux )上的其他進程通信方式(管道、消息隊列、共享內存、
信號量、 Socket ), Binder 機制的優點有:
特別地,對於從模型結構組成的Binder驅動來說:
不定期分享關於 安卓開發 的干貨,追求 短、平、快 ,但 卻不缺深度 。
⑵ socket通信原理
socket通信原理是一種「打開—讀/寫—關閉」模式的實現,伺服器和客戶端各自維護一個「文件」,在建立連接打開後,可以棚氏向文件寫入內容供對方讀取或者讀取對方內容,通訊結束時關閉文件。
Socket在應用層和傳輸層之間的一個抽象層,它把 TCP/IP 層復雜的操作抽象為幾個簡單的介面,供應用層調用實現進程在網路中的通信。Socket 起源於 UNIX,在 UNIX 一切皆文件的思想下,進程間通信就被冠名為文件描述符(file descriptor)。
Socket 保證了不同計算機之間的通信,也就是網路通信。對於網站,通信模型是伺服器與客戶端之間的通信。兩端都建立了一個 Socket 對象,然後通過 Socket 對象對數據進行傳輸。通常鏈遲散伺服器處於一個無限循環,等待客戶端的連接。
(2)androidsocket通信原理擴展閱讀
SOCK_STREAM類型的套介面為全雙向的位元組流。對於流類套介面,在接收或發送數據前必需處於已連接狀態。用connect()調用建立與另一套介面的連接,連接成功後,即可用send()和recv()傳送數據。當會話結束後,調用closesocket()。帶外數據根據規定用send()和recv()來接收。
實現SOCK_STREAM類型套介面的通訊協議保證數據不會丟失也不會重復。如果終端協議有緩沖區空間,且數據不能在一定時間成功發送旦襪,則認為連接中斷,其後續的調用也將以WSAETIMEOUT錯誤返回。
SOCK_DGRAM類型套介面允許使用sendto()和recvfrom()從任意埠發送或接收數據報。如果這樣一個套介面用connect()與一個指定埠連接,則可用send()和recv()與該埠進行數據報的發送與接收。