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呢?
由于對最后一種的疑惑,所以就借用搜索引擎學習了一番。
下面這個片文章將的非常好,有興趣的同學可以去看看。
http://blog.csdn.net/homebei2/article/details/6205380?reload ? ?點擊打開鏈接
當然這篇文章也有不足之處;
一個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 的實現方法個人感覺不難。
aidl學習的時候有點慢,這里推薦一篇文章:http://blog.csdn.net/jyfllzy/article/details/6299678 ?點擊打開鏈接
本人做的demo也分享給大家?http://download.csdn.net/detail/qiushibaiyi/5092725?點擊打開鏈接
總結
以上是生活随笔為你收集整理的android 进程通信的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++单、双精度浮点数16进制转10进制
- 下一篇: STM32+ULN2003驱动步进电机