1.進(jìn)程與線程
什么是進(jìn)程篇亭,在計(jì)算機(jī)系統(tǒng)內(nèi)進(jìn)程是包括I/O,虛擬內(nèi)存锄贷,處理器在內(nèi)的一種抽象概念译蒂,通常情況下,一個(gè)程序就是一個(gè)進(jìn)程谊却。在Android應(yīng)用程序中可以給四大組件指定android:process屬性來(lái)創(chuàng)建多進(jìn)程蹂随。
什么是線程,線程是CPU調(diào)度的最小單元因惭,是一種有限的系統(tǒng)資源岳锁。線程包含在進(jìn)程內(nèi),一個(gè)進(jìn)程可以有多個(gè)線程蹦魔,也可以只有單一線程激率,即主線程。同一進(jìn)程內(nèi)的線程共享代碼和數(shù)據(jù)勿决,而不同進(jìn)程乒躺,處于不同的上下文之間,不能共享內(nèi)存低缩,所以當(dāng)需要使用IPC交互數(shù)據(jù)嘉冒。
1.使用Bundle
android四大組件都支持在Intent中傳遞Bundle數(shù)據(jù)曹货。由于Bundle實(shí)現(xiàn)了Parcelable接口,可以在進(jìn)程間傳輸讳推。
2.使用共享文件
共享文件也是一種不錯(cuò)的進(jìn)程間通信的方式顶籽,兩個(gè)進(jìn)程通過(guò)讀寫(xiě)同一個(gè)文件來(lái)交換數(shù)據(jù)。主要的共享文件有以下幾種(1)xml文件银觅,只要雙方約定數(shù)據(jù)格式即可礼饱;(2)SharedPreferences,SharedPreferences是android提供的輕量級(jí)存儲(chǔ)方案究驴,底層實(shí)現(xiàn)上也是采用xml文件來(lái)存儲(chǔ)鍵值對(duì)
3.使用Messenger
通過(guò)messenger可以在不同進(jìn)程中傳遞Message對(duì)象镊绪,在message中放入我們需要傳遞的數(shù)據(jù),就可以輕松實(shí)現(xiàn)進(jìn)程數(shù)據(jù)傳遞了洒忧。Messenger的底層實(shí)現(xiàn)是AIDL蝴韭。工作原理如下圖?
4.使用AIDL
AIDL實(shí)現(xiàn)進(jìn)程間通信,不僅可以傳遞數(shù)據(jù)熙侍,還可以將好用的方法進(jìn)行共享万皿。其實(shí)現(xiàn)主要分為服務(wù)端和客戶端兩個(gè)方面。服務(wù)端創(chuàng)建Service來(lái)監(jiān)聽(tīng)客戶端的鏈接請(qǐng)求核行,然后創(chuàng)建AIDL文件牢硅,將暴露給客戶端的接口在AIDL中聲明,最后在Service中實(shí)現(xiàn)AIDL接口芝雪〖跤啵客戶端只需綁定服務(wù)端的服務(wù),即可調(diào)用服務(wù)端AIDL中的方法惩系。
5.使用ContentProvider
ContentProvider是android中專門(mén)提供的用于不同應(yīng)用間進(jìn)行數(shù)據(jù)共享的方式位岔,ContentProvider的底層實(shí)現(xiàn)是Binder。
6.使用socket
Socket也稱為套接字堡牡,是網(wǎng)絡(luò)通信中的概念抒抬。通過(guò)socket進(jìn)行通信是網(wǎng)絡(luò)通信的一種方式。
以上是android進(jìn)行IPC的常見(jiàn)方式晤柄,在后續(xù)的筆記中將逐一詳細(xì)分析擦剑。