欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于Android AIDL進(jìn)程間通信接口使用介紹

 更新時(shí)間:2013年04月19日 16:11:46   作者:  
本篇文章小編為大家介紹,基于Android AIDL進(jìn)程間通信接口使用介紹。需要的朋友參考下

AIDL:Android Interface Definition Language,它是一種android內(nèi)部進(jìn)程通信接口的描述語言,通過它我們可以定義進(jìn)程間的通信接口。

ICP:Interprocess Communication ,內(nèi)部進(jìn)程通信。

使用:

1、先創(chuàng)建一個(gè)aidl文件,aidl文件的定義和java代碼類似,但是!它可以引用其它aidl文件中定義的接口和類,但是不能引用自定義的java類文件中定義的接口和類,要引用自定義的接口或類,需要為此類也定義一個(gè)對(duì)應(yīng)的aidl文件,并且此類要實(shí)現(xiàn)Parcelable接口,同時(shí)aidl文件和類文件必須要在相同包下進(jìn)行聲明;Android包含了aidl編譯器,當(dāng)定義好一個(gè)aidl文件的時(shí)候,會(huì)自動(dòng)編譯生成一個(gè)java文件,此文件保存在gen目錄之下。

 

在這個(gè)項(xiàng)目中,定義了兩個(gè)aidl文件,其中Person實(shí)現(xiàn)了接口Parcelable,下面是這兩個(gè)aidl文件的定義:

Person.aidl

{

parcelable Person; 

}

IAIDLServerService.aidl

{

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

  interface IAIDLServerService{
    String sayHello();
    Person getPerson();
  }

}

2、編寫一個(gè)Service實(shí)現(xiàn)定義aidl接口中的內(nèi)部抽象類Stub,Stub繼承自Binder,并繼承我們?cè)赼idl文件中定義的接口,我們需要實(shí)現(xiàn)這些方法。Stub中文意思存根,Stub對(duì)象是在服務(wù)端進(jìn)程中被調(diào)用,即服務(wù)端進(jìn)程。

在客戶端調(diào)用服務(wù)端定義的aidl接口對(duì)象,實(shí)現(xiàn)Service.onBind(Intent)方法,該方法會(huì)返回一個(gè)IBinder對(duì)象到客戶端,綁定服務(wù)時(shí)需要一個(gè)ServiceConnection對(duì)象,此對(duì)象其實(shí)就是用來在客戶端綁定Service時(shí)接收Service返回的IBinder對(duì)象。

  ||public static abstract class Stub extends android.os.Binder implements com.webview.IAIDLServerService

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、在服務(wù)端注冊(cè)Service,將如下代碼添加進(jìn)Application節(jié)點(diǎn)之下!

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

至此,服務(wù)端進(jìn)程定義已經(jīng)完成!

4、編寫客戶端,注意需要在客戶端存一個(gè)服務(wù)端實(shí)現(xiàn)了的aidl接口描述文件,客戶端只是使用該aidl接口,獲取服務(wù)端的aidl對(duì)象(IAIDLServerService.Stub.asInterface(service))之后就可以調(diào)用接口的相關(guān)方法,而對(duì)象的方法的調(diào)用不是在客戶端執(zhí)行,而是在服務(wù)端執(zhí)行。

public class MainActivity extends Activity {private Button btn;private IAIDLServerService aidlService = null;
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();// 執(zhí)行接口定義的相關(guān)方法} 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);// 綁定服務(wù)}});}}

 客戶端目錄結(jié)構(gòu):

相關(guān)文章

  • Android Studio 運(yùn)行按鈕灰色的完美解決方法

    Android Studio 運(yùn)行按鈕灰色的完美解決方法

    今天新建項(xiàng)目的時(shí)候突然發(fā)現(xiàn)編譯后運(yùn)行按鈕為灰色,今天小編給大家?guī)砹薃ndroid Studio 運(yùn)行按鈕灰色的完美解決方法,非常不錯(cuò),對(duì)大家的需要或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2020-10-10
  • Android 布局中的android:onClick的使用方法總結(jié)

    Android 布局中的android:onClick的使用方法總結(jié)

    這篇文章主要介紹了Android 布局中的android:onClick的使用方法總結(jié)的相關(guān)資料,設(shè)置點(diǎn)擊時(shí)從上下文中調(diào)用指定的方法,這里提供實(shí)例幫助大家理解這部分內(nèi)容,需要的朋友可以參考下
    2017-08-08
  • 最新評(píng)論