看了《android開發(fā)藝術(shù)探索》第二章總結(jié)一下
IPC的方式有
- Bundle
- AIDL機制
- Messenger
- ContentProvider
- 文件共享
bundle
只能傳輸Bundle支持的數(shù)據(jù)刘绣,只能用于四大組件間的進程間通信
AIDL機制
詳情可以看我的service那篇文章
Messenger
這個是一個android系統(tǒng)為我們封裝的Binder的一個AIDL
個人感覺(有點類似socket那樣進行雙方通信)
代碼我就不去as中復(fù)制了震肮,這里寫一下偽代碼
Messenger中有兩個構(gòu)造方法馏鹤,一個是用handler
首先是新建一個Service奕翔,在里面弄一個handler,
然后新建一個Messager孤里,然后在Messenger的構(gòu)造方法上傳入handler姻政,這樣就在handler中處理客戶端傳來的消息
服務(wù)端想要返回消息傲霸,就通過Message.replyTo返回的Messager
通過Messenger.send給客戶端發(fā)消息免猾。
至于客戶端就綁定service是辕,因為Messenger 的另一個構(gòu)造方法中就是傳入IBinder,這樣構(gòu)造的出來的Messenger對象就調(diào)用messenger.send();
對于客戶端接收服務(wù)器返回的消息 就像是在Service中一樣創(chuàng)建一個Messenger猎提,handler免糕,然后就可以接收數(shù)據(jù)了
,這時候 就有一個疑問 這是完全兩個不同的Messenger忧侧,客戶端,服務(wù)端的牌芋,它們是怎么聯(lián)系起來的呢蚓炬,就是通過客戶端的Messenger.send(Message) 里面那個
Message.replyTo 將它賦值為客戶端接收服務(wù)端的Messager
這樣就聯(lián)系上了
messenger 適合一個個消息傳遞,不適合高并發(fā)
Socket
就是Socket通信躺屁。肯夏。不多講了,大家網(wǎng)上看吧
文件共享
就是創(chuàng)建一個本地文件,大家讀寫
ContextProvider
這個 其實本質(zhì)上可以認為是本地文件讀寫驯击。就是共享數(shù)據(jù)庫達到跨進程
總結(jié)
這是我讀書的一個簡單總結(jié)烁兰,堅決不推薦作為學習跨進程通信個人學習資料,這只是一個總結(jié)徊都,一個抽取重要知識點的大家想要了解沪斟,還是要去讀書,看官網(wǎng)暇矫,寫代碼.