使用Intent
- Activity、Service闭专、Receiver都支持在Intent中傳遞Bundle數(shù)據(jù)奴潘,而Bundle實(shí)現(xiàn)了Parcelable接口∮岸ぃ可以在不同的進(jìn)程間進(jìn)行傳輸画髓。
- 在一個(gè)進(jìn)程中啟動(dòng)兩外一個(gè)進(jìn)程的Activity、Service平委、Receiver奈虾,可以在Bundle中附加要傳遞的數(shù)據(jù)通過Intent發(fā)送出去。
使用文件共享
- Android 系統(tǒng)基于 Linux 廉赔,使得其并發(fā)讀取文件沒有限制地進(jìn)行肉微,甚至允許兩個(gè)線程同時(shí)對(duì)一個(gè)文件進(jìn)行讀寫操作,盡管這樣可能會(huì)出問題蜡塌。
- 可以在一個(gè)進(jìn)程中序列化一個(gè)對(duì)象到文件系統(tǒng)中碉纳,在另一個(gè)進(jìn)程中反序列化恢復(fù)這個(gè)對(duì)象。
- SharedPreferences 是個(gè)特例馏艾,系統(tǒng)對(duì)它的讀 / 寫有一定的緩存策略劳曹,即內(nèi)存中會(huì)有一份 ShardPreferences 文件的緩存奴愉,系統(tǒng)對(duì)他的讀 / 寫就變得不可靠,當(dāng)面對(duì)高并發(fā)的讀寫訪問铁孵,SharedPreferences 有很多大的幾率丟失數(shù)據(jù)锭硼。因此,IPC 不建議采用 SharedPreferences蜕劝。
使用Messageer
- Messager是一個(gè)輕量級(jí)的IPC方案檀头,底層實(shí)現(xiàn)是AIDL,可以在不同進(jìn)程中傳遞Message對(duì)象岖沛,一次只處理一個(gè)請(qǐng)求鳖擒。
- 這里客戶端和服務(wù)端都是通過獲取對(duì)方的messager來發(fā)送messgae。Messager中有一個(gè)Handler以串行的方式處理隊(duì)列中的消息烫止。不存在并發(fā)執(zhí)行蒋荚。如果大量消息同時(shí)發(fā)送到服務(wù)端,服務(wù)端只能一個(gè)一個(gè)處理馆蠕,所以大量并發(fā)請(qǐng)求就不適合使用Messager期升,而且Messager只適合傳遞消息,不能跨進(jìn)程調(diào)用服務(wù)端的方法互躬。
使用AIDL
- Messager本質(zhì)上也是AIDL播赁,只不過是戲同做了封裝方便上層調(diào)用,但是是Messager存在并發(fā)和跨進(jìn)程調(diào)用方法的問題吼渡。而AIDL則可以解決并發(fā)和跨進(jìn)程調(diào)用方法的問題容为。
- AIDL支持的數(shù)據(jù)類型
2.1 基本數(shù)據(jù)類型
2.2 String和CharSequence
2.3Parcelable,實(shí)現(xiàn)Parcelable接口的對(duì)象(PS:AIDL文件中用到了自定義的Parcelable對(duì)象寺酪,必須新建一個(gè)和他同名的AIDL文件坎背。)
2.4 ArrayList,里面的元素必須能夠被AIDL支持
2.5HashMap寄雀,里面的元素必須能夠被AIDL支持
使用ContentProvider
- 用于不同應(yīng)用間數(shù)據(jù)共享得滤,和Messager底層實(shí)現(xiàn)同樣是Binder和AIDL,系統(tǒng)做了封裝盒犹。