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);