哥哥手把手教你認識AIDL的詳細使用,來了老弟

為了克服Linux中IPC各種方式的缺點,在Android中引入了Binder機制。但是當說起Binder在Android中的使用時,幾乎所有的資料都是在說AIDL的使用。AIDL的全稱是Android Interface Definition Language,即Android接口定義語言,是Binder機制實現Android IPC時使用比較廣泛的工具。

下圖展示了該Demo的結構圖和AIDL關鍵文件:

? 1、建立兩個App,分別為Client端和Server端。

? ? ? 這個比較 好理解,Server端就是包含了Service真正干活的那一端;Client端就是通過遠程操控指揮的那一端,分別在不同的App中。如下圖所示:

? 2、在Server端main目錄下建立aidl文件夾以及.aidl文件,并copy一份到Client端,如圖6.1中②處所示結構。注意,Client端和Server端②處是一模一樣的。另外,AS中提供了快捷方式創建aidl文件,在main處點擊右鍵 > New > AIDL > AIDL File文件,按照提示給aidl文件命名即可自動創建完成,可以看到文件路徑也是該項目的包名。

? 這里給aidl命名為IDemoService.aidl,這里需要注意的是命名規范,一般都是以“I”開頭,表示是一個接口,其內容如下:

//========== IDemoService.aidl========

package com.songwei.aidldemoserver;

// Declare any non-default types here with import statements

interface IDemoService {

? ? void setName(String name);

? ? String getName();

}

? 3、Server端創建Service文件?AidlService.java,如圖6.1中③處所示,代碼如下:

<service

? ? android:name=".AidlService"

? ? android:exported="true">

? ? <intent-filter>

? ? ? ? <action android:name="com.songwei.aidl" />

? ? </intent-filter>

</service>

? ? ?這里有幾點需要注意:

? ? (1)exported屬性值,如果有“intent-filter”,則默認值為true,否則為false。所以這里其實可以去掉,因為有“intent-filter”,其默認值就是true。

? ? (2)由于筆者在后面啟動該service的時候用的action的方式,所以這里就有了“intent-filter”里面的action。如果用其他方式啟動,這個service的注冊信息就需要相應的改動了,有一定開發經驗的讀者應該都知道,就不展開講了,主要是怕讀者容易忽略這里,所以特別提醒一下。

? 4、編譯Sever端和Client端App,生成IDemoService.java文件。

? ? ? ?當編譯的時候,AS會自動為我們生成IDemoService.java文件,如圖6.1和圖6.2中④處所示。當你打開該文件的時候,是不是看到了如下場景?

AIDL是Android接口定義語言,IDemoService.java是一個java中的interface(接口),現在是不是若有所思了呢?AIDL正是定義了IDemoService.java這個接口!!! 這個接口文件就是AIDL幫助咱們生成的Binder相關代碼,這些代碼就是用來幫助實現Client端和Server端通信的。前面第2步中提到的IDemoService.aidl文件,其作用就是作為原料通過AIDL來生成這些你貌似看不懂的代碼的,第3步中的AidlService.java和后續在Client端App連接Server端App的時候,其實這個aidl文件就從來沒有出現過,也就是說,它已經沒有什么價值了。所以說,AIDL的作用就是用來自動生成Binder相關接口代碼的,而不需要開發者手動編寫。

? ? ? ?打開IDemoService.java文件后,點擊主菜單蘭Code > Reformat Code (或 Ctrl + Alt +L快捷健),會看到如下形式的接口文件: 后面在講完Client端和Server端的連接及通信后,還會繼續深入剖析這個文件。

? 5、Client端ClientActivity連接Server端AidlService并通信

? ? ? ?ClientActivity.java的內容如下,布局文件在此省略,比較簡單,就兩個按鈕,一個用于綁定,一個用于解綁,看Button命名也很容易分辨。

? 6、運行

? ? ? ?運行的時候,需要先啟動Service端進程,才能在Client端中點擊“綁定”的時候綁定成功。完成一次“綁定”和“解綁”,得到的log如下所示:

可以結合前面的ClientActivity.java和AidlService.java代碼中的添加的log,來理解一下這個流程。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,345評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,494評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,283評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,953評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,714評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,186評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,255評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,410評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,940評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,776評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,976評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,518評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,210評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,642評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,878評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,654評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,958評論 2 373

推薦閱讀更多精彩內容