哥哥手把手教你AIDL深入理解和使用,來了老弟

?前面一節(jié)講了AIDL最進(jìn)本的知識,這一節(jié)中將會結(jié)合更復(fù)雜的場景,更深入地介紹AIDL。(這一節(jié)的內(nèi)容會持續(xù)補充完整)

? 1、Client端是如何實現(xiàn)調(diào)用Server端方法的

? 2、AIDL支持的數(shù)據(jù)類型

? 3、AIDL數(shù)據(jù)類序列化問題

? 4、AIDL回調(diào)的使用

?當(dāng)Server端某個操作執(zhí)行完后,需要通知Client端自己完成了任務(wù),這個時候回調(diào)就帶來了很大的便利,和在同一個App中使用回調(diào)效果一樣。例如在上一節(jié)的例子中,Server完成了setName()這個操作(耗時的異步操作更能體現(xiàn)回調(diào)的作用)后,要通知Client端自己完成了任務(wù),可以進(jìn)行下一步的操作了,就是這樣一個場景?,F(xiàn)在在前面AIDL例子基礎(chǔ)上,對回調(diào)的使用步驟進(jìn)行說明。

(1)在Server端IDemoService.aidl同一目錄中添加一個新的.aidl接口文件,我這里命名為IDemoCallback.aidl,內(nèi)容如下:

(2)在IDemoService.aidl中添加注冊/反注冊兩個方法

? ? 第13行和第15行為新增的方法。將這兩個.aidl文件同步到Client端,使C/S兩端的aidl文件完全一樣,均為

最好將兩個app都編譯一遍,這樣后面有些地方可以用代碼補全,而不用手動書寫。當(dāng)然在AidlService.java中實現(xiàn)接口的時候肯定會報錯的,把新增的方法補上就可以了。

(3)在AidlService.java中添加如下加粗部分的代碼,

RemoteCallbackList是系統(tǒng)提供的一個用于存儲回調(diào)對象的列表,其對象mCallbacks用于存儲注冊的IDemoCallback對象。通過第3行的callback()方法中的內(nèi)容,我們可以推測它是采用一種類似于Broadcast的方式來實現(xiàn)回調(diào)的。當(dāng)setName()方法執(zhí)行完畢后,callback("'Andy song' is setted");就會把回調(diào)信息反饋給Client中注冊該回調(diào)的地方了。

在解綁定的地方調(diào)用unRegisterCallback()反注冊回調(diào)即可,這樣就完成了代碼整個代碼的編寫。這里需要注意注冊回調(diào)的時機(jī),一定要在setName()執(zhí)行前注冊,否則Client端收不到回調(diào)信息。

(5)運行C/S端,然后“綁定”/“解綁”,就會看到如下log信息:

第5行就是回調(diào)信息,表示回調(diào)成功。

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

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

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