注意:本文不做任何理論性的解釋說明,只有實際操作,至於Service的綁定過程,AIDL的實現過程之類的,一律不做深入講解,具體的原理講解,請跳轉學習AIDL,這一篇文章就夠了,這篇文章講解的很詳細,在此致敬
下面開始教程:
一、創建AIDL服務端
1、鼠標選中main文件夾,右鍵,new —— ADIL —— AIDL file,如圖所示
2,輸入aidl文件的名字,不要加後綴,如圖所示,然後點擊確定即可
3,生成後的目錄結構如下所示
4,編寫AIDL接口,如圖所示
5,點擊工具欄的build——make project,studio會幫我們把ADIL文件編譯成二進制文件
6,創建AIDL的實現類,在java文件夾上右鍵,new Service , 輸入文件名,系統會自動生成對應的文件,並且會自動在AndroidMainfest中幫我們配置好,生成的Service如圖
7,實現前面定義的接口,具體編寫方法看圖
8,編輯,安裝到手機上,這樣,AIDL的Service端就完成了
二、編寫AIDL的客戶端
1、創建AIDL文件夾,main ——— new —— Folder —— AIDL Folder,
2,創建AIDL的存放文件夾,aidl ——new —— pacakge , 粘貼進我們前面生成的AIDL文件的包名,粘貼好之後,如圖所示
3,把在Service端端生成的AIDL文件粘貼進我們創建好的文件夾裏面,如圖所示
4,點擊工具欄的build——make project
5,把ADIL作爲一個屬性引入,同時把ServiceConnection也作爲一個屬性引入(可以在其它位置實現後再引入,我這裏直接作爲匿名內部類引入了)
6,在onServiceConnected裏面實例化myAidlInterface,如圖所示
7,在適當的時候綁定Service,(一定要在調用之前綁定),如圖所示,實際使用中,最好做判空處理(示例代碼中沒寫),注意在解綁,防止內存泄漏等問題
new ComponentName("cn.showmac.aidlservice", "cn.showmac.aidlservice.PlusService")
ComponentName的兩個參數,第一個是AIDL文件的包名,第二個是要返回AIDL對象的Service
8,安裝,執行