安卓跨进程通信
為什么需要多進(jìn)程
①安卓系統(tǒng)給單個(gè)應(yīng)用可以使用的最大內(nèi)存做了限制,當(dāng)app想要突破限制時(shí),需要多進(jìn)程獲取更多內(nèi)存空間。
②一些特殊模塊需要不影響主模塊的穩(wěn)定性、不占用主模塊的內(nèi)存,并且需要與主業(yè)務(wù)生命周期剝離。
③app保活,一些app在后臺(tái)為了不被系統(tǒng)殺掉,可以用多線程方式進(jìn)行app拉活。
多進(jìn)程問(wèn)題
①Application多次重建
②靜態(tài)成員變量和單例模式失效:系統(tǒng)給每個(gè)進(jìn)程分配獨(dú)立虛擬機(jī),導(dǎo)致單例等會(huì)有多個(gè)副本
③線程同步機(jī)制失效:因?yàn)榛诙噙M(jìn)程,不同進(jìn)程的鎖對(duì)象都不同
④SharedPreferences可靠性降低:SharedPreferences不支持兩個(gè)進(jìn)程同時(shí)操作
安卓的跨進(jìn)程通信
Activity
Activity的跨進(jìn)程和進(jìn)程內(nèi)訪問(wèn)都需要Intent對(duì)象,但跨進(jìn)程不用指定Context對(duì)象和Activity的Class底下,需要的是訪問(wèn)Activity對(duì)應(yīng)的Action字符串,有些還要指定Uri(類似DeepLink)
ContentProvider
ContentProvider提供在多個(gè)應(yīng)用之間數(shù)據(jù)共享方式(對(duì)不同應(yīng)用的SqlLite數(shù)據(jù)庫(kù)進(jìn)行增刪改查),列表數(shù)據(jù)將以Cursor對(duì)象(二維表)形式返回。
Broadcast
廣播是被動(dòng)跨進(jìn)程通訊方式,當(dāng)某個(gè)程序向系統(tǒng)發(fā)送廣播,其余應(yīng)用都被動(dòng)接收廣播數(shù)據(jù)。聽(tīng)眾并不能主動(dòng)和電臺(tái)溝通(通過(guò)Intent對(duì)象發(fā)送需要廣播的數(shù)據(jù))。
Service
AIDL安卓接口定義語(yǔ)言,實(shí)際就是將跨進(jìn)程通信中的參數(shù)序列化、發(fā)送和解析返回等麻煩自動(dòng)完成。所需要做的就是寫(xiě)接口文件,用aidl工具轉(zhuǎn)化得到另一個(gè)java文件(客戶端和服務(wù)端都需要)。服務(wù)程序繼承Stub將函數(shù)接口中的邏輯實(shí)現(xiàn)。
總結(jié)
- 上一篇: EasyExcel基于2.2.6版本自定
- 下一篇: AOP、、