android 进程通信
從java web 轉(zhuǎn)到android有一段時(shí)間了,雖然根據(jù)以前的功底,完成一些簡(jiǎn)單的android應(yīng)用已經(jīng)不成問題了。
但是,沒有經(jīng)過系統(tǒng)的學(xué)習(xí)過android,始終感覺自己開發(fā)的時(shí)候“底氣不足”。
閱讀了部分android的開發(fā)文檔,android中最重要的幾個(gè)組件即:activity,service,content provider, broadcast,intent。
這些組件學(xué)習(xí)的時(shí)候都很好理解,但是一旦牽扯混合的時(shí)候總感覺有點(diǎn)犯迷糊。一切的根源就在于Intent,因?yàn)镮ntent是連接其他組件的重要且唯一的工具。
android,把每個(gè)apk都當(dāng)做一個(gè)單獨(dú)的進(jìn)程處理。進(jìn)程之間的通信也就十分的重要了。
把a(bǔ)ndroid的進(jìn)程通信分為兩種:進(jìn)程之間,和進(jìn)程之內(nèi)的。
進(jìn)程之內(nèi)的比較簡(jiǎn)單,通常都是用?Explicit intents 實(shí)現(xiàn)。
而進(jìn)程之間的通信,需要是用Implicit intents進(jìn)行實(shí)現(xiàn)。
(當(dāng)然,如果進(jìn)程內(nèi)部,你使用Implicit intents也可以)
通過Intent,去啟動(dòng)另一個(gè)activity ,service 或者發(fā)送一個(gè)broadcast。
當(dāng)intent進(jìn)行匹配activity,service或者broadcast的時(shí)候,就會(huì)發(fā)生一些情況。比如:你的intent 匹配了好多個(gè),android怎么選擇呢?
如果是activity,系統(tǒng)會(huì)彈出一個(gè)選擇畫面。如果是broadcast,所有的匹配項(xiàng)都會(huì)執(zhí)行。如果是多個(gè)service呢?
由于對(duì)最后一種的疑惑,所以就借用搜索引擎學(xué)習(xí)了一番。
下面這個(gè)片文章將的非常好,有興趣的同學(xué)可以去看看。
http://blog.csdn.net/homebei2/article/details/6205380?reload ? ?點(diǎn)擊打開鏈接
當(dāng)然這篇文章也有不足之處;
一個(gè)Intent對(duì)應(yīng)多種匹配結(jié)果的處理說明 一個(gè)intent有多個(gè)可匹配的處理組件,系統(tǒng)如何處理? 分響應(yīng)消息的組件類型: 1)如果是service那么這些service都可以啟動(dòng)并處理消息。 2)如果是Activity則會(huì)彈出一個(gè)對(duì)話框讓用戶進(jìn)行選擇。當(dāng)一個(gè)intent有多個(gè)匹配結(jié)果的時(shí)候(進(jìn)程之間的消息傳遞):
1)如果是activity,會(huì)彈出一個(gè)對(duì)話框讓用戶選擇。
2)如果是service,那么這些service都會(huì)被啟動(dòng),但是執(zhí)行處理響應(yīng)的只有一個(gè),執(zhí)行哪個(gè),是系統(tǒng)自行解決的(測(cè)試的結(jié)果是哪個(gè)先安裝執(zhí)行哪個(gè))
http://stackoverflow.com/questions/8381324/two-service-with-the-same-intent-filter ?點(diǎn)擊打開鏈接
3)如果是broadcast,那么所有的匹配結(jié)果都會(huì)被處理
進(jìn)程之間能共享和傳輸數(shù)(intent能傳輸參數(shù),但是它的主要功能不應(yīng)該在這上面):
1)content provider
2)使用aidl service
content provider 的實(shí)現(xiàn)方法個(gè)人感覺不難。
aidl學(xué)習(xí)的時(shí)候有點(diǎn)慢,這里推薦一篇文章:http://blog.csdn.net/jyfllzy/article/details/6299678 ?點(diǎn)擊打開鏈接
本人做的demo也分享給大家?http://download.csdn.net/detail/qiushibaiyi/5092725?點(diǎn)擊打開鏈接
總結(jié)
以上是生活随笔為你收集整理的android 进程通信的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++单、双精度浮点数16进制转10进制
- 下一篇: STM32+ULN2003驱动步进电机