天天看點

aidl使用采坑記

<code>aidl</code>是 <code>android interface definition language</code>的縮寫,它是一種<code>android</code>内部程序通信接口的描述語言,通過它我們可以定義程序間的通信接口

可以實作多個應用程式共享同一個service的功能,比如:im服務可以提供給多個app使用,先在推送基本都是采取這種方案

可以跨程序調用服務裡的方法

1.繼承service

2.在androidmanifest.xml裡注冊

aidl使用采坑記

aidl生成後的樣子

aidl使用采坑記

測試

其實到這裡我們就結束了。

接下來我們看看如果自定義傳遞的資料類型

aidl預設支援的類型包括java基本類型(int、long、boolean等),和(string、list、map、charsequence),如果要傳遞自定義的類型需要實作android.os.parcelable接口。

自定義message實體:

修改ihandler

aidl使用采坑記

注意: 自定類型aidl檔案名字、路徑需要和自定義類名字、路徑保持一緻,

 編譯一下,發現報了個錯

aidl使用采坑記

意思是必須定義message的方向,aidl

參數有方向。(學習了)

如果<code>sendmessage</code>方法的<code>message</code>參數是純粹的輸入參數—這意味着是從用戶端到伺服器的資料,你需要在aidl聲明:

如果<code>sendmessage</code>方法的<code>message</code>參數是純粹的輸出-這意味着它的資料是通過從伺服器到用戶端,使用:

如果<code>sendmessage</code>方法的<code>message</code>參數是輸入也是輸出-用戶端的值在服務可能會修改,使用:

我們這裡是用戶端範圍服務端的資料,是以用in

好了,aidl的用法就到這裡了,aidl主要是用在跨程序間通信和資料交換,平時開發中也用的比較少,通過這個例子加深了對他的用法,後面有什麼好的坑,我會發出了的,謝謝大家。最後做個連結 

https://github.com/xiangzhihong/aidl

上一篇: 網易面試
下一篇: 代理模式

繼續閱讀