【Android最最簡(jiǎn)單】AIDL入門

前言? ? ? ??

Android系統(tǒng)中的進(jìn)程之間不能共享內(nèi)存,那么如果兩個(gè)不同的應(yīng)用程序之間需要通訊需要怎么辦呢?首推的肯定是今天要講的進(jìn)程通訊AIDL,即Android?Interface Definition Language(安卓接口定義語言),是Android用來執(zhí)行進(jìn)程間通訊最主要的方式之一。

舉個(gè)例子

????????比如,最最常用的功能,第三方登錄。第三方登錄信息的提供方(像QQ、微信、微博等)都是通過AIDL實(shí)現(xiàn)了跨進(jìn)程的數(shù)據(jù)傳遞,加上一些校驗(yàn)邏輯,保證了數(shù)據(jù)的安全性。

????????慣例,先上效果圖,github地址在文末:

效果圖

一、AIDL的語法

????????首先,介紹一下AIDL的語法。

????????AIDL的語法與Java的接口寫法十分類似,甚至可以說一模一樣,但也有細(xì)微的區(qū)別,總結(jié)如下:

????????1.不能使用private、public、protect修飾方法;

? ? ? ? 2.支持傳遞數(shù)據(jù)類型有:java基本數(shù)據(jù)類型(byte、short、int、long、float、double、char、boolean)、String、CharSequence、List(接收方必須是ArrayList)、Map(接收方必須是HashMap)、其他AIDL定義的AIDL接口、實(shí)現(xiàn)Parcelable序列化的類;

? ? ? ? 3.其他AIDL定義的AIDL接口和實(shí)現(xiàn)Parcelable序列化的類必須import,即使在相同包結(jié)構(gòu)下,其余的類型不需要import;

? ? ? ? 4.對(duì)于非基本數(shù)據(jù)類型,也不是String和CharSequence類型的,需要有方向指示,包括in、out和inout,in表示由客戶端設(shè)置,out表示由服務(wù)端設(shè)置,inout是兩者均可設(shè)置。

二、AIDL使用

? ? ? ? AIDL的使用分為服務(wù)端和客戶端,由服務(wù)端創(chuàng)建service。首先我們來實(shí)現(xiàn)服務(wù)端的創(chuàng)建和AIDL創(chuàng)建。

? ? ? ? 如下圖,右鍵New創(chuàng)建AIDL文件,會(huì)直接生成一個(gè)AIDL模板類IService.aidl。

創(chuàng)建AIDL文件

? ? ? ? 插入一個(gè)題外話,aidl的存放位置有兩種,一種是像圖中一樣,與java文件夾同級(jí)創(chuàng)建aidl文件夾,然后在其中創(chuàng)建包結(jié)構(gòu),然后aidl文件存放其中;另一種方式是放到j(luò)ava的結(jié)構(gòu)目錄中,使用這種方式需要在build文件中做相應(yīng)配置:

aidl文件存放在java目錄中配置

? ? ? ? 回歸正題,我們對(duì)生成的AIDL模板代碼進(jìn)行修改,如下,然后Build-Make Module生成相應(yīng)java文件(文件目錄:app-->build-->generated-->source--aidl-->debug):

aidl文件

? ? ? ? 接著創(chuàng)建一個(gè)Service(AIDLService.class)返回IService的句柄,如下圖,取一個(gè)action如<action android:name="com.leo.aidl" />

service

????????服務(wù)端的編寫至此完成,接下來是客戶端的編寫。

????????首先將服務(wù)端創(chuàng)建的aidl文件夾原封不動(dòng)拷貝到客戶端,必須保證路徑一致,同樣Build-Make Module生成相應(yīng)java文件。

拷貝aidl

? ? ? ? 接著,綁定service,一定記得5.0之后綁定service一定要帶上service所處的包名哦!

UI操作
綁定服務(wù)

接下來就可以試試發(fā)送的效果啦!??!

發(fā)送請(qǐng)求

????????到這里就完美結(jié)束啦!就可以看到開頭gif的效果啦,第一次寫分享文章不是很熟練,多多包涵,有錯(cuò)誤請(qǐng)指正,謝謝!

? ? ? ? 完整代碼請(qǐng)戳:github地址

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容