<code>aidl</code>是 <code>android interface definition language</code>的縮寫,它是一種<code>android</code>内部程序通信接口的描述語言,通過它我們可以定義程序間的通信接口
可以實作多個應用程式共享同一個service的功能,比如:im服務可以提供給多個app使用,先在推送基本都是采取這種方案
可以跨程序調用服務裡的方法
1.繼承service
2.在androidmanifest.xml裡注冊
aidl生成後的樣子
測試
其實到這裡我們就結束了。
接下來我們看看如果自定義傳遞的資料類型
aidl預設支援的類型包括java基本類型(int、long、boolean等),和(string、list、map、charsequence),如果要傳遞自定義的類型需要實作android.os.parcelable接口。
自定義message實體:
修改ihandler
注意: 自定類型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