android Binder跨進程 AIDL使用

1. Binder通信機制流程(整體框架)

2. 如何使用AIDL

一. 服務(wù)端

  • 創(chuàng)建一個專門用來 存放AIDL文件的包 如 com.kkk.myaidl
  • com.kkk.myaidl 包下建一個.aidl文件,如 IService.aidl,代碼如下。
package com.kkk.myaidl;
import com.kkk.aidl.Person;//很重要截珍,即使在同一個包下也要加import.
interface IServiceaidl{
public int getSum(int num1,int num2);
public Person getPerson();
void setPerson(in Person person);
}
另外疙筹,接口中的參數(shù)除了aidl支持的類型巫糙,其他類型必須標(biāo)識其方向:到底是輸入還是輸出抑或兩者兼之旦签,用in破托,out或者inout來表示肪跋,上面的代碼我們用in標(biāo)記,因為它是輸入型參數(shù)土砂。
  • 創(chuàng)建服務(wù)端service
package com.kkk.service;
public class MyService extends Service{
@Override
public IBinder onBind(Intent intent){
    return mbinder;
}
private final IServiceaidl.Stub mbinder = new IServiceaidl.Stub(){
@Override
public int getSum(int num1,int num2){
    return num1+num2;
}
}
}
  • 在manifests中聲明service
<service android:name=".MyService" android:enabled="true" android:exported="true">
            <intent-filter>
                <action android:name="com.kkk.service.MyService"/>
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </service>

設(shè)置action是為了其他應(yīng)用隱式bindService州既。通過隱式調(diào)用的方式來起activity或者service,需要把category設(shè)為default萝映,這是因為吴叶,隱式調(diào)用的時候,intent中的category默認(rèn)會被設(shè)置為default序臂。

  • 傳輸自定義類型的參數(shù)晤郑。
    android studio中,新建一個aidl文件贸宏,會自動生成一個aidl文件夾造寝。在其中定義需要的類型的.aidl文件。如 Person.aidl吭练。
package com.kkk.aidl;
parcelable Person;

注意诫龙,這里的parcelable是類型,不是Parcelable接口鲫咽。接著在jave文件夾下建立一個與aidl中相同的包名,如com.kkk.aidl签赃。在包中新建Person.java谷异,并實現(xiàn)Parcelable接口。一定不能直接把Person.java放在自動生成的aidl文件夾下锦聊,否則會出現(xiàn)無法找到Person.java類的錯誤歹嘹。

二. 客戶端

  • 將服務(wù)端工程中的com.kkk.myaidl包整個拷貝到客戶端中。雙方的aidl包名必須完全一致孔庭,否則會報錯尺上。
  • 新建一個ServiceConnection。
 private ServiceConnection mconnection = new ServiceConnection(){
     @Override  
        public void onServiceDisconnected(ComponentName name)  
        {  
            mIMyService = null;  
        }  

        @Override  
        public void onServiceConnected(ComponentName name, IBinder service)  
        {  
            //通過服務(wù)端onBind方法返回的binder對象得到MyService的實例圆到,得到實例就可以調(diào)用它的方法了  
             mIServiceaidl =IServiceaidl.Stub.asInterface(service);
        }  
 }
  • 綁定service怎抛。
    Intent intent = new Intent();
    intent.setAction(BIND_SERVICE);
    bindService(intent, mconnection, Context.BIND_AUTO_CREATE);
  • 調(diào)用getSum。
  try {
        int sum = mIServiceaidl.add(1, 2);
        Log.e(TAG, "add: " + sum);
        } catch (RemoteException e) {
            e.printStackTrace();
        }

參考資料

任玉剛blog
完整項目

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末芽淡,一起剝皮案震驚了整個濱河市马绝,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌挣菲,老刑警劉巖富稻,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件白胀,死亡現(xiàn)場離奇詭異,居然都是意外死亡廷痘,警方通過查閱死者的電腦和手機笋额,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進店門鉴未,熙熙樓的掌柜王于貴愁眉苦臉地迎上來铜秆,“玉大人连茧,你說我怎么就攤上這事巍糯。” “怎么了宅楞?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長迅箩。 經(jīng)常有香客問我,道長奕塑,這世上最難降的妖魔是什么龄砰? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任反镇,我火速辦了婚禮歹茶,結(jié)果婚禮上惊豺,老公的妹妹穿的比我還像新娘尸昧。我一直安慰自己彻磁,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著朽褪,像睡著了一般。 火紅的嫁衣襯著肌膚如雪嗤堰。 梳的紋絲不亂的頭發(fā)上踢匣,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天划鸽,我揣著相機與錄音,去河邊找鬼嫂用。 笑死啰脚,一個胖子當(dāng)著我的面吹牛粒梦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播泄朴,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼祖灰!你這毒婦竟也來了钟沛?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤局扶,失蹤者是張志新(化名)和其女友劉穎恨统,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體三妈,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡畜埋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了畴蒲。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片悠鞍。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖饿凛,靈堂內(nèi)的尸體忽然破棺而出狞玛,到底是詐尸還是另有隱情,我是刑警寧澤涧窒,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布心肪,位于F島的核電站,受9級特大地震影響纠吴,放射性物質(zhì)發(fā)生泄漏硬鞍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一戴已、第九天 我趴在偏房一處隱蔽的房頂上張望固该。 院中可真熱鬧,春花似錦糖儡、人聲如沸伐坏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽桦沉。三九已至,卻和暖如春金闽,著一層夾襖步出監(jiān)牢的瞬間纯露,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工代芜, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留埠褪,地道東北人。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像钞速,于是被迫代替她去往敵國和親贷掖。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,933評論 2 355

推薦閱讀更多精彩內(nèi)容