Android進程間通信 - 幾種方式的對比總結

什麼是RPC
RPC(Remote Procedure Call)即遠程過程調用,它是一種通過網絡從遠程計算機程序上請求服務,在不需要了解底層網絡技術的協議下,即可獲取計算機進程中的數據。RPC使得開發包括網絡分佈式多程序在內的應用程序更加容易。

RPC在OSI網絡通信7層模型中,位於傳輸層與應用層之間,即位於會話層: 


RPC實現模式,就是我們常說的C/S結構,引用百度百科的定義:

RPC採用客戶機/服務器模式。請求程序就是一個客戶機,而服務提供程序就是一個服務器。首先,客戶機調用進程發送一個有進程參數的調用信息到服務進程,然後等待應答信息。在服務器端,進程保持睡眠狀態直到調用信息到達爲止。當一個調用信息到達,服務器獲得進程參數,計算結果,發送答覆信息,然後等待下一個調用信息,最後,客戶端調用進程接收答覆信息,獲得進程結果,然後調用執行繼續進行。

簡而言之:客戶端能向服務端發送若干個進程請求,服務端根據發送的進程參數依次返回對應的計算結果。RPC可以說客戶端調用服務端的接口的過程,是面向接口的編程。

RPC在Android中咋樣體現的,我們看看官方的解釋RPC與IPC的關係

Android 利用遠程過程調用 (RPC) 提供了一種進程間通信 (IPC) 機制,通過這種機制,由 Activity 或其他應用組件調用的方法將(在其他進程中)遠程執行,而所有結果將返回給調用方。 這就要求把方法調用及其數據分解至操作系統可以識別的程度,並將其從本地進程和地址空間傳輸至遠程進程和地址空間,然後在遠程進程中重新組裝並執行該調用。 然後,返回值將沿相反方向傳輸回來。 Android 提供了執行這些 IPC 事務所需的全部代碼,因此您只需集中精力定義和實現 RPC 編程接口即可。 
要執行 IPC,必須使用 bindService() 將應用綁定到服務上。

也就是說,RPC在的Android具體體現,是依賴 bindService()的方式,在onBind方法將服務端的計算結果返回給客戶端(Activity等組件)的過程。

什麼是IPC
IPC 即 Inter-Process Communication (進程間通信),是指進程間數據交互的過程。 
Android底層是基於Linux,而Linux基於安全考慮,是不允許兩個進程間直接操作對方的數據,這就是進程隔離

在Linux系統中,虛擬內存機制爲每個進程分配了線性連續的內存空間,操作系統將這種虛擬內存空間映射到物理內存空間,每個進程有自己的虛擬內存空間,進而不能操作其他進程的內存空間,每個進程只能操作自己的虛擬內存空間,只有操作系統纔有權限操作物理內存空間.進程隔離保證了每個進程的內存安全,但是在大多數情形下,不同進程間的數據通訊是不可避免的,因此操作系統必須提供跨進程通信機制。

雖然Android是基於Linux,但並不能繼承Linux中的進程通信的方式,Android有着自己進程間通信方式。常用有如下幾種:

Bundle (四大組件間)
文件共享 
可參考Android進程通信 - 序列化Serialzable與Parcelable中的示例
AIDL (基於Binder) 
能自動生成Binder文件的工具,相當於工具。
Android進程通信 - AIDL的使用方法
Messenger(基於Binder) 
類似於Hnadler發消息用法
Android進程間通信 - Messenger的使用和理解
ContentProvider(基於Binder) 
Android進程間通信 - ContentProvider內容提供者
Socket(網絡) 
Android進程間通信 - Socket使用(TCP、UDP)
下面引用Android開發藝術探索的總結,已經很全面了 

原文鏈接:https://blog.csdn.net/hzw2017/article/details/81275438

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章