android 進程通信

從java web 轉到android有一段時間瞭,雖然根據以前的功底,完成一些簡單的android應用已經不成問題瞭。

但是,沒有經過系統的學習過android,始終感覺自己開發的時候“底氣不足”。

閱讀瞭部分android的開發文檔,android中最重要的幾個組件即:activity,service,content provider, broadcast,intent。

這些組件學習的時候都很好理解,但是一旦牽扯混合的時候總感覺有點犯迷糊。一切的根源就在於Intent,因為Intent是連接其他組件的重要且唯一的工具。

android,把每個apk都當做一個單獨的進程處理。進程之間的通信也就十分的重要瞭。

把android的進程通信分為兩種:進程之間,和進程之內的。

進程之內的比較簡單,通常都是用 Explicit intents 實現。

而進程之間的通信,需要是用Implicit intents進行實現。

(當然,如果進程內部,你使用Implicit intents也可以)

通過Intent,去啟動另一個activity ,service 或者發送一個broadcast。

當intent進行匹配activity,service或者broadcast的時候,就會發生一些情況。比如:你的intent 匹配瞭好多個,android怎麼選擇呢?

如果是activity,系統會彈出一個選擇畫面。如果是broadcast,所有的匹配項都會執行。如果是多個service呢?

由於對最後一種的疑惑,所以就借用搜索引擎學習瞭一番。

 

當然這篇文章也有不足之處;

[html www.aiwalls.com

一個Intent對應多種匹配結果的處理說明  

一個intent有多個可匹配的處理組件,系統如何處理?  

分響應消息的組件類型:  

1)如果是service那麼這些service都可以啟動並處理消息。  

2)如果是Activity則會彈出一個對話框讓用戶進行選擇。  

當一個intent有多個匹配結果的時候(進程之間的消息傳遞):

1)如果是activity,會彈出一個對話框讓用戶選擇。

2)如果是service,那麼這些service都會被啟動,但是執行處理響應的隻有一個,執行哪個,是系統自行解決的(測試的結果是哪個先安裝執行哪個)

http://stackoverflow.com/questions/8381324/two-service-with-the-same-intent-filter  點擊打開鏈接

3)如果是broadcast,那麼所有的匹配結果都會被處理

 

進程之間能共享和傳輸數(intent能傳輸參數,但是它的主要功能不應該在這上面):

1)content provider

2)使用aidl service

content provider 的實現方法個人感覺不難。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *