ipc即進(jìn)程間通信昵骤,inter process communication树碱。
ipc是多種進(jìn)程間通信的統(tǒng)稱而已。
ipc進(jìn)程間通信包括
1 bundler变秦,在Android 中的四大組件中的? activity? broadcast receiver? service都是能夠通過(guò)intent傳遞bundle數(shù)據(jù)的成榜,bundle實(shí)現(xiàn)了parcelable接口。
2 通過(guò)messager?通過(guò)它可以在不同進(jìn)程中傳遞Message對(duì)象蹦玫,在Message中放入我們需要傳遞的數(shù)據(jù)赎婚,就可以輕松地實(shí)現(xiàn)數(shù)據(jù)的進(jìn)程間傳遞。
Messenger是一種輕量級(jí)的IPC方案樱溉,它的底層實(shí)現(xiàn)是AIDL惑淳,實(shí)現(xiàn)Messenger有以下兩個(gè)步驟,分為服務(wù)端進(jìn)程和客戶端進(jìn)程饺窿。
3 使用IDLE,這是一種遠(yuǎn)程服務(wù)跨進(jìn)程通信的方式
4 content-provider 用于不同應(yīng)用間的數(shù)據(jù)共享移斩。底層實(shí)現(xiàn)的是binder肚医。
5 socket ,可以實(shí)現(xiàn)任意兩個(gè)終端的通信向瓷,這里使用的是socket在一個(gè)設(shè)備上進(jìn)行進(jìn)程間通信肠套。
6 binder ,從ipc角度來(lái)講猖任,是進(jìn)程間的通信你稚。在應(yīng)用層的角度來(lái)講就是客戶端和服務(wù)端的通信。
Binder是Android中的一個(gè)類,它實(shí)現(xiàn)于IBinder接口刁赖。從IPC角度來(lái)說(shuō)搁痛,Binder是一種跨進(jìn)程通信的方式。從Android應(yīng)用層來(lái)說(shuō)宇弛,Binder是客戶端與服務(wù)端通信的橋梁鸡典,
通過(guò)bindService,服務(wù)端會(huì)返回一個(gè)包含了服務(wù)端業(yè)務(wù)調(diào)用的Binder對(duì)象枪芒,通過(guò)這個(gè)Binder對(duì)象彻况,客戶端就可以獲取服務(wù)端提供的服務(wù)或者數(shù)據(jù)。這里的服務(wù)包括普通服務(wù)及基于AIDL的服務(wù)舅踪。在Android開發(fā)中纽甘,Binder主要應(yīng)用于Service。
為何傳輸要實(shí)現(xiàn)parcelable
Intent不僅能傳遞java基本數(shù)據(jù)類型抽碌,還能傳遞類的對(duì)象悍赢,前提是這些類必須實(shí)現(xiàn)Serializable或者Parcelable接口。
實(shí)現(xiàn)Serializable接口的方式是通過(guò)對(duì)象的序列化和反序列化來(lái)實(shí)現(xiàn)對(duì)象傳遞的咬展。
實(shí)現(xiàn)Parcelable接口的方式是通過(guò)writeToParcel將你的對(duì)象映射成
Parcel對(duì)象泽裳,再通過(guò)createFromParcel將Parcel對(duì)象映射成你的對(duì)象。也可以將Parcel看成是一個(gè)流破婆,通過(guò)
writeToParcel把對(duì)象寫到流里面涮总,在通過(guò)createFromParcel從流里讀取對(duì)象,只不過(guò)這個(gè)過(guò)程需要你來(lái)實(shí)現(xiàn)祷舀,因此寫的順序和讀的
順序必須一致瀑梗。
參考了?https://www.cnblogs.com/cr330326/p/6340958.html
http://blog.csdn.net/huivs12/article/details/49076261
在此感謝