Android 進程間通信實現解決方案

今天接到一個任務,要求app和app之間可以通信,然後就學習了一下Android 進程間通信實現原理,在這裏和大家一起學習和分享一下。

Android Service分爲兩種:
1.本地服務(Local Service): 同一個apk內被調用
2.遠程服務(Remote Service):被另一個apk調用(遠程服務需要藉助AIDL來完成)


首先介紹一下AIDL是什麼東東:

AIDL (Android Interface Definition Language) 是一種IDL 語言,用於生成可以在Android設備上兩個進程之間進行進程間通信(interprocess communication, IPC)的代碼。如果在一個進程中(例如Activity)要調用另一個進程中(例如Service)對象的操作,就可以使用AIDL生成可序列化的參數。AIDL IPC機制是面向接口的,像COM或Corba一樣,但是更加輕量級。它是使用代理類在客戶端和實現端傳遞數據。


AIDL 的作用:
由於每個應用程序都運行在自己的進程空間,並且可以從應用程序UI運行另一個服務進程,而且經常會在不同的進程間傳遞對象。在Android平臺,一個進程通常不能訪問另一個進程的內存空間,所以要想對話,需要將對象分解成操作系統可以理解的基本單元,並且有序的通過進程邊界。通過代碼來實現這個數據傳輸過程是冗長乏味的,Android提供AIDL工具來處理這項工作。


選擇AIDL的使用場合
官方文檔特別提醒我們何時使用AIDL是必要的:只有你允許客戶端從不同的應用程序爲了進程間的通信而去訪問你的service,以及想在你的service處理多線程。如果不需要進行不同應用程序間的併發通信(IPC),you should create your interface by implementing a Binder;或者你想進行IPC,但不需要處理多線程的,則implement your interface using a Messenger。無論如何,在使用AIDL前,必須要理解如何綁定service——bindService。


下面給大家推薦一個例子,這個例子來自:http://www.cnblogs.com/lonkiss/archive/2012/10/23/2735548.html

估計大家看完這個例子並且結合我上面說的概念就基本知道了怎麼解決Android進程間的通信實現,通過AIDL是一個很好的解決方案。後面我會給大家介紹進程間的通信原理分析。




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