AIDL简单示例

  


1)。AIDL简介:AIDL (Android接口定义语言),即安卓接口定义语言。

AIDL主要是用于进程对远程服务的通信,也就是一个进程采用AIDL可以启动另一个进程的服务,并从该服务中获取数据(通信)。

2)。具体做法:

1。首先创建一个AIDL接口代码:

//com.example.aidl.AidlGetServiceData.aidl   package  com.example.aidl;   interface  AidlGetServiceData   {   int  getAge ();   String  getName ();   }

/*

,,注:AIDL定义接口的源代码必须以.aidl结尾。

,,,,AIDL接口中用到的数据类型,除了基本类型,字符串,列表,地图,CharSequence进行之外,其他类型均全部需要导包。

,,

定义好上面的AIDL接口后,ADT工具会自动在创/com/example/aidl中生成一个AidlGetServiceData.java接口,在该接口里面包含一个存根内部类,该类实现了内部和AidlGetServiceData两个接口,这个存根类将会作为远程服务的回调类- - -因为他实现了内部的接口,因此可以作为服务的onBind()方法的返回值。

public  static  abstract  class  Stub  extends  android.os.Binder  implements  com.yn.aidl.AidlGetServiceData   */2 .定义好AIDL接口后,就可以着手远程服务的编写了。//src/com.example.aidl_service.AIDLService.java   package  com.example.aidl_service;   import  com.example.aidl.AidlGetServiceData;   import  android.app.Service;   import  android.content.Intent;   import  android.os.IBinder;   import  android.os.RemoteException;   public  class  AIDLService  extends  Service  {   private  int 年龄;   private  String 名称;   @Override   public  void  onCreate (), {   super.onCreate ();   时间=this.age  10;   this.name =,”得到Service 获get  data ; using  aidl”;   }//由于存根是抽象类,故在这创建一个子类,获取服务的数据,作为onBind()的返回值,携带服务的数据。   public  class  AidlGetServiceDataBinder  extends  AidlGetServiceData.Stub   {   @Override   public  int  getAge (), throws  RemoteException  {   return 年龄;   }   @Override   public  String  getName (), throws  RemoteException  {   return 名称;   }   }   @Override   public  IBinder  onBind (Intent 意图),{//,返回AidlGetServiceDataBinder的实例   return  new  AidlGetServiceDataBinder ();   }   }


3.服务类开发完成后,还必须在AndroidMainfest。xml中进行声明:

& lt;应用程序   ,,,,,,,android: allowBackup=" true "   ,,,,,,,android:图标=癅drawable/ic_launcher”   ,,,,,,,android: label=" @string/app_name "   ,,,,,,,android:主题=癅style/AppTheme”,在   ,,,,,,& lt; service  android: name=" com.example.aidl_service.AIDLService ",在   ,,,,,,,,,,& lt; intent-filter>   ,,,,,,,,,,,,,,& lt; action  android: name=" com.example.aidl.action.AIDL_TEST ",/比;   ,,,,,,,,,,& lt;/intent-filter>   ,,,,,,& lt;/service>   ,,,& lt;/application>

经过以上步骤,远程服务便已经完成了。接下来,可以创建另一个进程来通过AIDL获取到远程服务中的数据。


创建一个android应用程序,在活动中添加两个按钮和两个TextView,分别用来显示从远程服务中读取的数据。

具体做法:

1。创建一个应用程序后,首先将上面定义好的AIDL接口拷贝到工程目录中,同理,ADT工具会自动在创/com/example/aidl中生成一个AidlGetServiceData.java接口。

2。实例化一个ServiceConnection对象,该对象的onServiceConnected ((ComponentName名称、内部服务))方法中的服务参数就是远程服务的onBind()方法中的返回值对象的代理,因此,要获取onBind()返回值对象,还需进行如下处理:

private  ServiceConnection  conn =, new  ServiceConnection (), {   @Override   public  void  onServiceConnected (ComponentName 名字,,IBinder 服务)   {=,aidlService  AidlGetServiceData.Stub.asInterface(服务);   }   @Override   public  void  onServiceDisconnected (ComponentName 名称)   {   时间=aidlService 零;   }   };

3。在活动的onCreate()方法中,启动远程服务。

目的意图=new意图(“com.example.aidl.action.AIDL_TEST”);

bindService(康涅狄格州的意图,Service.BIND_AUTO_CREATE);

AIDL简单示例