2016-07-25 26 views
0

我讀了關於進程間通信(IPC)和創建發送數據從一個組件到另一個組件。
我知道的是IPC定義了不同組件之間的通信通道。
該通道將具有用於組件發送數據的編程接口。創建界面的方法如AIDL,B​​inder和Messenger。
創建接口後,要發送的數據必須爲Parcel。 所以總結步驟如下:
1.創建一個編程接口。
2.將接口綁定到應用程序組件。
3.向該組件發送數據的組件必須將數據轉換爲Parcel。

但是突然發現了什麼叫意圖可以發送數據從一個組件到另一個沒有這種開銷。
我需要解釋有關Intent如何發送數據而無需創建接口?
意圖內部有一個接口?
意圖與IPC,綁定服務和接口之間的關係是什麼?Android:意圖和組件之間的數據交換

回答

2

哇你在這裏有很多困惑。讓我們看看我能否清理一些事情。

1)IPC不會將數據從一個組件發送到另一個組件(它可以,但它是一種低效的方法)。 IPC將數據從一個進程發送到另一個進程。一個Android應用程序通常是一個進程,儘管它不一定是(開發人員有時會將服務放入另一個進程中)。這是一個重要區別的原因是進程不能共享內存,所以需要像IPC這樣的特殊方法來在它們之間發送任何數據。

2)組件之間發送的數據不一定是parcel。這是一種方式,也是Android在發送啓動參數時使用的方式。但沒有必要。

3)使用Binder與服務交談只有在兩者處於同一進程中時纔可能。它是完全避免使用IPC的一種方法。

4)AIDL是IPC方法的一個包裝。 AIDL使用IPC,它只是試圖使它看起來像正常的函數調用客戶端。

5)Intent對象是在Android中啓動服務或活動所需的所有數據的抽象。它將包含可能或不可以在Parcel中的參數。它可能會也可能不會使用IPC來發送這些參數(如果目標Activitiy或服務在另一個APK中,它將會發生,如果不是這樣的話)。

我認爲這裏的問題在於你並不真正瞭解過程是什麼,Android組件是什麼,以及過程如何實際進行通信。我建議做一些研究。

+0

因此,我們可以說是在同一個進程中的兩個活動之間進行通信Binder被使用,Intent是Android爲Binder提供的實現嗎? –