安卓AIDL使用詳解
說到AIDL就會提到IPC裆甩,具體說明是AIDL和IPC鲁豪,這些概念大家自行查閱潘悼,在這里我就不多說了∨老穑總之一句話治唤,就是兩個進程之間互相交互數(shù)據(jù)。
在這里我以兩個app之間互相傳遞數(shù)據(jù)為例糙申。
首先studio新建項目作為服務端宾添。
本次demo進程間傳遞的數(shù)據(jù)是個bean實體類,所以新建一個Book實體類柜裸,并且book必須實現(xiàn)Parcelable缕陕,這里可以studio插件生成
在main處右鍵,new-Folder-AIDL Folder,建好后會出現(xiàn)aidl文件夾疙挺。
在aidl文件夾右鍵扛邑,AIDl-AIDL File,新建Book.aidl,此時aidl文件夾會出現(xiàn)你項目的包名,Book.aidl就在改包名下铐然。Book.aidl默認生成的可以刪掉蔬崩,然后手動加上parcelable Book;
在aidl文件夾右鍵,AIDl-AIDL File,新建IBookManager.aidl,用于暴露出方法給客戶端app調用搀暑。注意含參數(shù)的方法需要加上TAG(in /out/inout),in表示數(shù)據(jù)流向服務端沥阳,out表示數(shù)據(jù)從服務端流向客戶端夺克,inout表示雙向流通镰吵。這里的場景是客服端向服務店增加數(shù)據(jù)沿彭,所以寫in
這時clean項目會報錯跨跨,說找不到Book類凤跑,這里需要在build.gradle加上
sourceSets{
? ? main{
? ? ? ? java.srcDirs = ['src/main/java','src/main/aidl']
? ? }
}
由于服務端和客戶端是通過bindservice來簡歷鏈接信卡,所以新建service
別忘了在配置文件中注冊service,至此服務端代碼完畢家淤。
再來編寫客戶端乎莉,新建項目埠啃,取名AIDLClient死宣,把之前服務端aidl文件拷貝到客戶端,放到和java文件夾平級的地方碴开。同時把之前Book.java也拷貝到aidl文件夾com.hengchuang.aidldemo下
綁定服務毅该,調用服務端方法博秫,得到服務端的書單
運行服務端,再運行客戶端眶掌,就可以在客服端拿到服務端app的數(shù)據(jù)
點擊客戶端增加書名挡育,服務端會收到
完畢。