一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Android - 基于Android AIDL進程間通信接口使用介紹

基于Android AIDL進程間通信接口使用介紹

2021-01-09 17:03Android開發網 Android

本篇文章小編為大家介紹,基于Android AIDL進程間通信接口使用介紹。需要的朋友參考下

aidl:android interface definition language,它是一種android內部進程通信接口的描述語言,通過它我們可以定義進程間的通信接口。

icp:interprocess communication ,內部進程通信。

使用:

1、先創建一個aidl文件,aidl文件的定義和java代碼類似,但是!它可以引用其它aidl文件中定義的接口和類,但是不能引用自定義的java類文件中定義的接口和類,要引用自定義的接口或類,需要為此類也定義一個對應的aidl文件,并且此類要實現parcelable接口,同時aidl文件和類文件必須要在相同包下進行聲明;android包含了aidl編譯器,當定義好一個aidl文件的時候,會自動編譯生成一個java文件,此文件保存在gen目錄之下。

基于Android AIDL進程間通信接口使用介紹

 

在這個項目中,定義了兩個aidl文件,其中person實現了接口parcelable,下面是這兩個aidl文件的定義:

person.aidl

{

parcelable person; 

}

iaidlserverservice.aidl

{

  package com.webview;
  import com.webview.person;// 引用上面的person.aidl

  interface iaidlserverservice{
    string sayhello();
    person getperson();
  }

}

2、編寫一個service實現定義aidl接口中的內部抽象類stub,stub繼承自binder,并繼承我們在aidl文件中定義的接口,我們需要實現這些方法。stub中文意思存根,stub對象是在服務端進程中被調用,即服務端進程。

在客戶端調用服務端定義的aidl接口對象,實現service.onbind(intent)方法,該方法會返回一個ibinder對象到客戶端,綁定服務時需要一個serviceconnection對象,此對象其實就是用來在客戶端綁定service時接收service返回的ibinder對象。

  ||public static abstract class stub extends android.os.binder implements com.webview.iaidlserverservice

?
1
public class aidlserverservice extends service{@overridepublic ibinder onbind(intent intent) {return binder;}private iaidlserverservice.stub binder = new stub() {@overridepublic string sayhello() throws remoteexception {return "hello aidl";}@overridepublic person getperson() throws remoteexception {person person = new person();person.setname("livingstone");person.setage(22);return person;}};}

3、在服務端注冊service,將如下代碼添加進application節點之下!

<service android:name="com.webview.aidlserverservice"
  android:process=":remote">
  <intent-filter>
    <action android:name="com.webview.iaidlserverservice"></action>
  </intent-filter>
</service>

至此,服務端進程定義已經完成!

4、編寫客戶端,注意需要在客戶端存一個服務端實現了的aidl接口描述文件,客戶端只是使用該aidl接口,獲取服務端的aidl對象(iaidlserverservice.stub.asinterface(service))之后就可以調用接口的相關方法,而對象的方法的調用不是在客戶端執行,而是在服務端執行。

?
1
public class mainactivity extends activity {private button btn;private iaidlserverservice aidlservice = null;<br>private serviceconnection conn = new serviceconnection() {@overridepublic void onservicedisconnected(componentname name) {aidlservice = null;}@overridepublic void onserviceconnected(componentname name, ibinder service) {aidlservice = iaidlserverservice.stub.asinterface(service);try {aidlservice.dofunction();// 執行接口定義的相關方法} catch (remoteexception e) {e.printstacktrace();}}};@overrideprotected void oncreate(bundle savedinstancestate) {super.oncreate(savedinstancestate);setcontentview(r.layout.activity_main);btn = (button) findviewbyid(r.id.button);tv = (textview) findviewbyid(r.id.textview);btn.setonclicklistener(new onclicklistener() {@overridepublic void onclick(view v) {intent service = new intent("com.webview.iaidlserverservice");bindservice(service, conn, bind_auto_create);// 綁定服務}});}}

 客戶端目錄結構:

基于Android AIDL進程間通信接口使用介紹

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 免费看欧美一级特黄a大片一 | 久久亚洲伊人 | 91精品国产综合久久消防器材 | 99视频在线免费观看 | 激情五月开心 | 亚洲精品久久久WWW游戏好玩 | 天天插在线视频 | 99久久一区二区精品 | 欧美成人日韩 | 午夜精品国产自在现线拍 | 美女狂揉尿口揉到失禁 | 俄罗斯性高清完整版 | 99久久精品在免费线18 | 草莓视频深夜释放 | 久久视频这有精品63在线国产 | 国产中文在线 | 91久久国产青草亚洲 | 9191免费永久观看 | 国产国语videosex另类 | 免费一级毛片完整版在线看 | 日本免费v片一二三区 | 爱情岛论坛亚洲永久入口口 | 91传媒在线观看 | 甜蜜惩罚小说 | 欧美日韩高清完整版在线观看免费 | 国产亚洲精品第一综合linode | 日本96在线精品视频免费观看 | 精品第一国产综合精品蜜芽 | 无限在线观看视频大全免费高清 | 亚洲色图欧美视频 | 亚洲一区二区三区在线播放 | 天堂男人在线 | 麻生希无码 | 日韩视频在线观看中字 | 亚洲国产精品久久网午夜 | 欧美成人中文字幕 | 被高跟鞋调教丨vk | 91亚洲视频在线观看 | 亚洲品质自拍视频网站 | 国产精品久久久久久久久久久搜索 | 免费看视频网站 |