AIDL - 簡介

本文僅作為 AIDL 的初步了解與具體代碼實(shí)現(xiàn)的講解笼吟。并未深入IPC原理、Binder原理等霸旗。

一贷帮、概述

AIDL :Android Interface Definition Language,即 Android接口定義語言定硝。

  • 用于定義服務(wù)器和客戶端通信接口的一種描述語言皿桑,可以拿來生成用于 IPC 的代碼。

IPC :Inter-Process Communication蔬啡,即跨進(jìn)程通信诲侮。

二、基礎(chǔ)

1.文件

  • AIDL文件以 .aidl 為后綴名箱蟆。

  • AIDL文件分為兩類:

    • 一類用來聲明實(shí)現(xiàn)了Parcelable接口的數(shù)據(jù)類型沟绪,以供其他AIDL文件使用那些非默認(rèn)支持的數(shù)據(jù)類型。(注:文件內(nèi)可注釋)

    • 另一類用來定義接口方法空猜,聲明要暴露哪些接口給客戶端調(diào)用绽慈,定向Tag就是用來標(biāo)注這些方法的參數(shù)值。(注:文件內(nèi)不可注釋)

2.數(shù)據(jù)類型

  • byte辈毯、char坝疼、short、int谆沃、long钝凶、float、double唁影、boolean耕陷、還有String掂名、CharSequence。

  • 實(shí)現(xiàn)了 Parcelable 接口的數(shù)據(jù)類型哟沫。

  • List 類型饺蔑。

    • List承載的數(shù)據(jù)必須是AIDL支持的類型,或者是其它聲明的AIDL對象嗜诀。
  • Map類型猾警。

    • Map承載的數(shù)據(jù)必須是AIDL支持的類型,或者是其它聲明的AIDL對象隆敢。

3.定向Tag

定向Tag肿嘲,在跨進(jìn)程通信中表示數(shù)據(jù)的流向,用于標(biāo)注方法的參數(shù)值筑公。

  • in:

    • 數(shù)據(jù)只能由客戶端傳向服務(wù)端雳窟。

    • 服務(wù)端對數(shù)據(jù)的修改不會(huì)影響到客戶端。

  • out:

    • 數(shù)據(jù)只能由服務(wù)端傳向客戶端匣屡。

    • 即使客戶端向方法接口傳入了一個(gè)對象封救,該對象中的屬性值也是為空的,即不包含任何數(shù)據(jù)捣作,服務(wù)端獲取到該對象后誉结,對該對象的任何操作,就會(huì)同步到客戶端這邊券躁。

  • inout:

    • 數(shù)據(jù)可在服務(wù)端與客戶端之間雙向流通惩坑。

    • 服務(wù)端對數(shù)據(jù)的改變同時(shí)也同步到了客戶端。

三也拜、注意

  • 如果AIDL方法接口的參數(shù)值類型是:基本數(shù)據(jù)類型以舒、String、CharSequence或者其他AIDL文件定義的方法接口慢哈,那么這些參數(shù)值的定向 Tag 默認(rèn)是且只能是 in蔓钟。以外的參數(shù)值都需要明確標(biāo)注使用哪種定向Tag。

  • 明確導(dǎo)包卵贱。在AIDL文件中需要明確標(biāo)明引用到的數(shù)據(jù)類型所在的包名滥沫。

  • 避免出現(xiàn)類名重復(fù)導(dǎo)致無法創(chuàng)建文件的錯(cuò)誤,需要先建立AIDL文件之后再創(chuàng)建類键俱。

    • 例:先創(chuàng)建 User.aidl兰绣,再創(chuàng)建 User.java
  • 實(shí)現(xiàn) Parcelable 的類需要補(bǔ)充 readFromParcel(Parcel dest) 不然編譯不過。

    • // 例(userName password mark 為變量)
      public void readFromParcel(Parcel dest) {
        userName = dest.readString();
        password = dest.readString();
        mark = dest.readByte() != 0;
      }
      
  • 定義接口方法的 AIDL 文件是不能注釋的(否則無法編譯)编振。

  • 寫完 接口定義需 Make Module缀辩。

  • 在進(jìn)程間通信中真正起作用的并不是 AIDL 文件,而是系統(tǒng)據(jù)此而生成的文件,可以在以下目錄中查看系統(tǒng)生成的文件雌澄。之后需要使用到當(dāng)中的內(nèi)部靜態(tài)抽象類 Stub

  • 調(diào)用 AIDL 的程序需要把 AIDL 文件及實(shí)現(xiàn) Parcelable 接口的數(shù)據(jù)類拷貝過來(不要修改代碼杯瞻,不要修改包路徑)镐牺。

四惋戏、使用

Demo

  • 服務(wù)端:AIDL-Service

  • 客戶端:AIDL-Client


2020-04-24

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末列赎,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子矗晃,更是在濱河造成了極大的恐慌旗唁,老刑警劉巖畦浓,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異检疫,居然都是意外死亡讶请,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門屎媳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來夺溢,“玉大人,你說我怎么就攤上這事烛谊》缦欤” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵丹禀,是天一觀的道長状勤。 經(jīng)常有香客問我,道長双泪,這世上最難降的妖魔是什么持搜? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮焙矛,結(jié)果婚禮上朵诫,老公的妹妹穿的比我還像新娘。我一直安慰自己薄扁,他們只是感情好剪返,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著邓梅,像睡著了一般脱盲。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上日缨,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天钱反,我揣著相機(jī)與錄音,去河邊找鬼。 笑死面哥,一個(gè)胖子當(dāng)著我的面吹牛哎壳,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播尚卫,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼归榕,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了吱涉?” 一聲冷哼從身側(cè)響起刹泄,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎怎爵,沒想到半個(gè)月后特石,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鳖链,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年姆蘸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片芙委。...
    茶點(diǎn)故事閱讀 38,161評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡乞旦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出题山,到底是詐尸還是另有隱情兰粉,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布顶瞳,位于F島的核電站玖姑,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏慨菱。R本人自食惡果不足惜焰络,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望符喝。 院中可真熱鬧闪彼,春花似錦、人聲如沸协饲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽茉稠。三九已至描馅,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間而线,已是汗流浹背铭污。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工恋日, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人嘹狞。 一個(gè)月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓岂膳,卻偏偏與公主長得像,于是被迫代替她去往敵國和親磅网。 傳聞我的和親對象是個(gè)殘疾皇子谈截,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容