Aidl Lite

由于嘴賤闯第,立了個(gè)flag...
And thanks for this flag ...
To be continued...

Aidl

1)快速上手

  1. JavaBean
    首先,先寫一個(gè)JavaBean備用
    PS:該文件不要同AIDL文件放置同一個(gè)包下睬棚,否是運(yùn)行會(huì)提示找不到該類


    Book.java
  2. JavaBean.aidl
    然后在開始我們新建我們的AIDL文檔前驯绎,先新建一個(gè)與上面JavaBean同名的AIDL文件檀训,既Book.aidl,并在其中聲明我們的Book對(duì)象

    Book.aidl

    并且該文件需要同上面的JavaBean文件在AIDL下放至于相同的位置淑蔚,應(yīng)該是IDE 解析的時(shí)候會(huì)自動(dòng)去相同路徑下查詢,算是一種映射吧愕撰,因?yàn)榇龝?huì)Sync項(xiàng)目后source下會(huì)自動(dòng)生成java代碼刹衫,import引用的是aidl路徑下的Book.aidl,而這則是由實(shí)現(xiàn)了Parcelable的Book.java映射過去的搞挣,所以這中間路徑需保持一致带迟,不然鎖鏈就斷了 (待研究)
    278511509262463_.pic_hd.jpg

  3. AIDL
    最后我們開始新建真正所要用的AIDL對(duì)象:BookManager.aidl,并在其中寫入接口函數(shù)
    在我這小菜鳥現(xiàn)有的理解中囱桨,可以暫且將AIDL作為接口來看待仓犬,但不同于接口的是
    要注意:

    • 在AIDL文件中使用自定義的JavaBean對(duì)象(或非默認(rèn)數(shù)據(jù)類型),都必須要在文件中顯式地導(dǎo)入進(jìn)來舍肠,正如注釋所寫的:在此用導(dǎo)入語句來聲明任何非默認(rèn)類型搀继;
    • 并且別忘了對(duì)象參數(shù)的類型定義,既in/out/inout

    不然會(huì)導(dǎo)致第四步的Sync Project的時(shí)候報(bào)錯(cuò)......(慘痛經(jīng)歷)


    Aidl
  4. Sync Project with Gradle Files
    至此翠语,在AS中點(diǎn)擊Sync Project同步下項(xiàng)目叽躯,編譯器將自動(dòng)根據(jù)我們的AIDL文件生成同名的.java文件(若這里忘了同步,則在后續(xù)代碼的調(diào)用將不會(huì)有快捷提示了)
    生成的.java路徑(Project模式下):


    image.png
  5. Service
    由于我們的AIDL是跟Service配合使用的肌括,所以我們就接著在Service中創(chuàng)建并調(diào)用点骑,具體如下
    由于AIDL也是Binder的子類(有點(diǎn)忘了,我后續(xù)確認(rèn)下嘿嘿嘿)谍夭,所以只要通過binder新建個(gè)aidl的對(duì)象畔况,然后自然就會(huì)重寫我們aidl里的方法(這也是為什么我暫且將其作為接口看待的原因)


    Service

    然后記得在onBind()函數(shù)中將上述myBinder返回即可,至此Service部分就寫完了

  6. Activity
    最后是我們的Activity慧库,Activity部分也挺簡(jiǎn)單的
    我們只需要在onServiceConnected()中通過調(diào)用AIDL.Stub.asInterface()跷跪,并將該方法中的IBinder型參數(shù)傳入即可,這樣我們就獲取到了我們的AIDL對(duì)象齐板,而后續(xù)的事也就是通過該對(duì)象來調(diào)用之前寫在里面的方法罷了


    Activity
  1. 結(jié)果


    image.png

2)添加監(jiān)聽

  1. 新建監(jiān)聽aidl文件:BookListener.aidl吵瞻,并在其中完善監(jiān)聽接口


    BookListener.aidl
  2. 在BookManager.aidl中也添加注冊(cè)和解綁監(jiān)聽的方法,記得需要顯式導(dǎo)包


    BookManager.aidl
  3. Service中重寫AIDL中兩個(gè)新添加的方法以實(shí)現(xiàn)注冊(cè)和解綁甘磨,并且模擬添加書籍


    重寫方法

(模擬添加書籍可參照開發(fā)藝術(shù)探索P78)


模擬持續(xù)添加book
  1. Activity中獲取BookListener的對(duì)象橡羞,并重寫方法打印,然后記得調(diào)用bookManager.registerListener()即可


    2017-10-27-09-36-41.jpg

    2017-10-27-09-37-06.jpg
  2. 結(jié)果:
    可以從log里看到济舆,當(dāng)Activity銷毀調(diào)用unregisterListener()時(shí)卿泽,無法找到之前注冊(cè)的listener


    Log

PS:若Service和Activity在同一個(gè)進(jìn)程的情況下,則不會(huì)有上述現(xiàn)象

3)使用RemoteCallbackList

由于我們的Service和Activity是在兩個(gè)進(jìn)程,而對(duì)象不能跨進(jìn)程傳輸签夭,而多進(jìn)程跨進(jìn)程的話齐邦,無法調(diào)取到同一對(duì)象,因?yàn)閷?duì)象不能跨進(jìn)程傳輸第租,所以Binder會(huì)把客戶端傳遞過來的對(duì)象重新轉(zhuǎn)換生成一個(gè)新的對(duì)象措拇,
故若多進(jìn)程時(shí)解綁,需要使用RemoteCallbackList

  1. 將listenerList類型從List改為RemoteCallbackList


    RemoteCallbackList
  2. 重寫binder中的注冊(cè)和解綁函數(shù)


    修改注冊(cè)解綁方法

    需要注意的是RemoteCallbackList的size可以通過beginBroadcast()獲取慎宾,但需要在調(diào)用后丐吓,調(diào)用finishBroadcast()


    RemoteCallbackList.begin
  3. 結(jié)果


    Log

項(xiàng)目地址:

遺留

  • AIDL里的in,out趟据,inout三種類型
  • 由于上面只是知其然券犁,還需要看官方文檔知其所以然下

Refrence

  • 《Android開發(fā)藝術(shù)探索》
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市汹碱,隨后出現(xiàn)的幾起案子粘衬,更是在濱河造成了極大的恐慌,老刑警劉巖比被,帶你破解...
    沈念sama閱讀 221,888評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件色难,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡等缀,警方通過查閱死者的電腦和手機(jī)枷莉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來尺迂,“玉大人笤妙,你說我怎么就攤上這事≡朐#” “怎么了蹲盘?”我有些...
    開封第一講書人閱讀 168,386評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)膳音。 經(jīng)常有香客問我召衔,道長(zhǎng),這世上最難降的妖魔是什么祭陷? 我笑而不...
    開封第一講書人閱讀 59,726評(píng)論 1 297
  • 正文 為了忘掉前任苍凛,我火速辦了婚禮,結(jié)果婚禮上兵志,老公的妹妹穿的比我還像新娘醇蝴。我一直安慰自己,他們只是感情好想罕,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,729評(píng)論 6 397
  • 文/花漫 我一把揭開白布悠栓。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪惭适。 梳的紋絲不亂的頭發(fā)上笙瑟,一...
    開封第一講書人閱讀 52,337評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音腥沽,去河邊找鬼逮走。 笑死鸠蚪,一個(gè)胖子當(dāng)著我的面吹牛今阳,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播茅信,決...
    沈念sama閱讀 40,902評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼盾舌,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了蘸鲸?” 一聲冷哼從身側(cè)響起妖谴,我...
    開封第一講書人閱讀 39,807評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎酌摇,沒想到半個(gè)月后膝舅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,349評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡窑多,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,439評(píng)論 3 340
  • 正文 我和宋清朗相戀三年仍稀,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片埂息。...
    茶點(diǎn)故事閱讀 40,567評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡技潘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出千康,到底是詐尸還是另有隱情享幽,我是刑警寧澤,帶...
    沈念sama閱讀 36,242評(píng)論 5 350
  • 正文 年R本政府宣布拾弃,位于F島的核電站值桩,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏豪椿。R本人自食惡果不足惜奔坟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,933評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望砂碉。 院中可真熱鬧蛀蜜,春花似錦、人聲如沸增蹭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至霎奢,卻和暖如春户誓,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背幕侠。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評(píng)論 1 272
  • 我被黑心中介騙來泰國打工帝美, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人晤硕。 一個(gè)月前我還...
    沈念sama閱讀 48,995評(píng)論 3 377
  • 正文 我出身青樓悼潭,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親舞箍。 傳聞我的和親對(duì)象是個(gè)殘疾皇子舰褪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,585評(píng)論 2 359

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