一直想玩一下AIDL述寡,今天抽空搞定了一下取视,現(xiàn)在來記錄下了~
aidl全稱Android Interface Definition Language,是安卓跨進(jìn)程通訊列吼。
本教程基于AndroidStudio開發(fā)工具岭洲,實(shí)現(xiàn)一個簡單的Sample沪编。
一般aidl的效果是這樣子地:
app-->A充當(dāng)service的作用呼盆,這個app里面運(yùn)行著一個服務(wù)
app>B充當(dāng)client,調(diào)用A里面的service的數(shù)據(jù)
這邊說一下一個東東:
由于只是個簡單的Sample蚁廓,所以好多人會把充當(dāng)Service的這個app只用一個service访圃,沒有Activity,但是Android4.0以后不允許只有service而沒有Activity的應(yīng)用存在相嵌,我的設(shè)備是Android5.0的腿时,所以需要有一個簡單的界面。
好的饭宾,現(xiàn)在開始:
1 先創(chuàng)建Service的app
首先創(chuàng)建一個aidl
app-> new-> aidl->aidlfile
創(chuàng)建好一個aidl以后在aidl里面添加兩個方法
ok批糟,創(chuàng)建好了以后,bulid一下就會生成aidl對應(yīng)的Java文件
2 創(chuàng)建service
跟普通的創(chuàng)建service的方法一樣看铆,創(chuàng)建一個service徽鼎,編寫onBind方法
首先創(chuàng)建一個類繼承IAidl.Stub,這個是Java文件里面自動創(chuàng)建的一個類弹惦,是Binder的子類否淤,也實(shí)現(xiàn)了aidl的方法,這邊我們處理一下
做一下標(biāo)記棠隐,標(biāo)記是從這個app里面拿過去的
然后寫一下onBine方法的返回
這樣服務(wù)端就配置ok了石抡,當(dāng)客戶端綁定到我們服務(wù)端時,會返回mBinder對象助泽,就可以拿到getStringFromRemote返回的值了
3 現(xiàn)在去配置客戶端
注意:aidl的客戶端跟服務(wù)端的aidl要一毛一樣啰扛,包名也要一致,所以這邊有個小技巧
打開服務(wù)端的aidl目錄嗡贺,拷貝整個文件夾到客戶端去
具體隐解?
那就這樣吧:
在main目錄下黏貼整個個aidl文件夾
回來就可以了
4 最后,在client里面啟動service暑刃,獲取數(shù)據(jù)就行了
新建一個serviceConnection厢漩,并在onServiceConnection時獲取到Aidl實(shí)例
在client的oncreat時啟動service并綁定,此時就可以再onServiceConnection那邊拿到服務(wù)端返回的數(shù)據(jù)
這邊注意下啟動service的上下文岩臣,以setComponent的方式添加service參數(shù)溜嗜。第一個是包,名架谎,第二個是類名炸宵,類名就是服務(wù)端配置的那個service的name
運(yùn)行時應(yīng)該先啟動service的app叼耙,再啟動client的app
完~~~