深入淺出 Android核心組件Service(5)
在遠(yuǎn)程的Service調(diào)用中,Activity和Service到底是怎么溝通的?對于Service的遠(yuǎn)程調(diào)用,一般會在不同的工程中也就是兩個不同的進(jìn)程,那么進(jìn)程的溝通機(jī)制是什么?傻蛋畫了一個圖來說明。

點擊查看大圖
Android進(jìn)程在進(jìn)行遠(yuǎn)程通訊時會:
1.產(chǎn)生一個主線程。
2. 產(chǎn)生Looper對象
3.產(chǎn)生一個消息隊列。
4.產(chǎn)生一個虛擬機(jī)對象來實現(xiàn)Java和C++之間的溝通。
5.通過C/C++層的IPC來實現(xiàn)遠(yuǎn)程通訊。
所謂的 進(jìn)程間通訊:Android通過IBinder接口來實現(xiàn)進(jìn)程間的通訊,MyActivity會調(diào)用IBinder的transact()函數(shù)通過IPC來調(diào)用遠(yuǎn)程的onTransact()函數(shù)。注意: 在默認(rèn)情況下,如果Service和Activity、 BroadcastReceiver在同一個工程里面,那么這些組件都會在同一個進(jìn)程中執(zhí)行,并且由主線程負(fù)責(zé)執(zhí)行,當(dāng)然也可以通過配置讓其在不同的組件里面執(zhí)行,比如上一節(jié)我們就讓Service在Remote進(jìn)程中運行。