<th id="wu2k2"><s id="wu2k2"></s></th> <blockquote id="wu2k2"></blockquote>
  • <tr id="wu2k2"></tr>
  • <samp id="wu2k2"><tbody id="wu2k2"></tbody></samp><samp id="wu2k2"><tbody id="wu2k2"></tbody></samp>
  • 更多精彩內(nèi)容,歡迎關(guān)注:

    視頻號
    視頻號

    抖音
    抖音

    快手
    快手

    微博
    微博

    java binder

    文檔

    java binder

    binder是基于c/s架構(gòu)的,主要包括四個部分:服務端,客戶端,Binder驅(qū)動,ServiceManager,四部分之間的交互都是通過Binder來實現(xiàn)的,而且java層binder架構(gòu)實際上也是基于c/s架構(gòu)的。
    推薦度:
    導讀binder是基于c/s架構(gòu)的,主要包括四個部分:服務端,客戶端,Binder驅(qū)動,ServiceManager,四部分之間的交互都是通過Binder來實現(xiàn)的,而且java層binder架構(gòu)實際上也是基于c/s架構(gòu)的。

    java binder是什么,讓我們一起了解一下?

    binder是基于c/s架構(gòu)的,主要包括四個部分:服務端(Server),客戶端(Client),Binder驅(qū)動ServiceManager,四部分之間的交互都是通過Binder來實現(xiàn)的,而且java層binder架構(gòu)實際上也是基于c/s架構(gòu)的。

    那么binder機制在java層是如何使用的?

    java層binder架構(gòu)實際上也是基于c/s架構(gòu)的,而且其在類的命名上也盡量與native層保持一致,因此可認為java層的binder架構(gòu)是native層binder架構(gòu)的一個鏡像。

    示例Binder類的初始化:

    const?char*?const?kBinderPathName?=?"android/os/Binder";
    ????static?int?int_register_android_os_Binder(JNIEnv*?env)
    ????{undefined
    ????????jclass?clazz?=?FindClassOrDie(env,?kBinderPathName);
    ????????gBinderOffsets.mClass?=?MakeGlobalRefOrDie(env,?clazz);
    ????????gBinderOffsets.mExecTransact?=?GetMethodIDOrDie(env,?clazz,?"execTransact",?"(IJJI)Z");
    ????????gBinderOffsets.mObject?=?GetFieldIDOrDie(env,?clazz,?"mObject",?"J");
    ????????return?RegisterMethodsOrDie(
    ????????????env,?kBinderPathName,
    ????????????gBinderMethods,?NELEM(gBinderMethods));
    ????}

    也可以創(chuàng)建一個Service,在其onBind里返回一個服務端Binder對象,在客戶端的ServiceConnection里拿到這個Binder對象。

    //服務端
    public?class?BinderPoolService?extends?Service?{
    private?static?final?String?TAG?=?"BinderPoolService";
    private?Binder?mBinderPool?=?new?BinderPool.BinderPoolImpl();
    @Nullable
    @Override
    public?IBinder?onBind(Intent?intent)?{
    return?mBinderPool;
    }
    }
    //客戶端
    private?ServiceConnection?mBinderPoolConnection?=?new?ServiceConnection()?{
    @Override
    public?void?onServiceConnected(ComponentName?name,?IBinder?service)?{
    //拿到服務端返回的Binder接口
    mBinderPool?=?IBinderPool.Stub.asInterface(service);
    ...
    }
    @Override
    public?void?onServiceDisconnected(ComponentName?name)?{
    }
    };
    Intent?intent?=?new?Intent(mContext,?BinderPoolService.class);
    mContext.bindService(intent,?mBinderPoolConnection,?Context.BIND_AUTO_CREATE);

    以上就是小編今天的分享了,希望可以幫助到大家。

    文檔

    java binder

    binder是基于c/s架構(gòu)的,主要包括四個部分:服務端,客戶端,Binder驅(qū)動,ServiceManager,四部分之間的交互都是通過Binder來實現(xiàn)的,而且java層binder架構(gòu)實際上也是基于c/s架構(gòu)的。
    推薦度:
    為你推薦
    資訊專欄
    熱門視頻
    相關(guān)推薦
    win10c盤滿了怎么清理 java binlog 如何清理win10電腦c盤 java bit java blob java break wps怎么求和 java bufferedimage java bufferedoutputstream java build.gradle java bundle java bytebuffer java byte取值范圍 java calculate 蘋果13怎么開機 java calendar獲取當前時間 java callback java ceiling 平板如何錄屏 java cglib java binary excel表格怎么合并單元格 java bigdecimal java benchmark java beanutils 手機充電發(fā)熱發(fā)燙是什么原因 手機充電時可以玩手機嗎 java bean java base64decoder java base64 java barrier java bacnet win10專業(yè)版和企業(yè)版的區(qū)別 java async java assembly java aspose java aspectj java asmx java ascii java arrays.sort
    Top 国产精品成人国产乱一区| 久久久久国产精品人妻| 国产在线观看91精品不卡| 精品久久无码中文字幕| 国产啪精品视频网站| 国产成人亚洲精品91专区高清| 亚洲一区二区三区国产精品无码| 最新国产精品拍自在线观看| 精品久久中文字幕有码| 任我爽橹在线精品视频| 久久久久久九九99精品| 精品一区二区三区免费| 国产精品一区二区久久精品无码| 国内精品久久久久影院蜜芽| 99久久99久久久精品齐齐| 久久亚洲精品成人AV| 国产精品186在线观看在线播放| 亚洲精品成a人在线观看| 国产精品扒开做爽爽爽的视频 | 好湿好大硬得深一点动态图91精品福利一区二区 | 无码人妻精品一区二区三区不卡 | 亚洲乱人伦精品图片| 亚洲国产精品不卡在线电影| 亚洲精品乱码久久久久久蜜桃不卡| 国产91精品新入口| 国产精品公开免费视频| 精品国产福利在线观看一区| 中文精品一卡2卡3卡4卡| 国产精品天天影视久久综合网 | 久久99精品综合国产首页| 老司机亚洲精品影视www| 日批日出水久久亚洲精品tv| 青青草97国产精品免费观看| 免费精品久久久久久中文字幕| 日韩亚洲综合精品国产| 国产精品国产三级国产普通话a| 日韩精品中文字幕在线观看| 情侣视频精品免费的国产| 国产精品国产三级国快看| 国产精品久久久久久亚洲小说| 国产精品素人福利|