1. 程式人生 > >Android程序間通訊 - 幾種方式的對比總結

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有著自己程序間通訊方式。常用有如下幾種:

下面引用Android開發藝術探索的總結,已經很全面了
這裡寫圖片描述

參考