AIDL 原名:Android Interface definition language 即Android内部进程之间的通信,通俗的说就是两个APP(服务端(APP或者Service)、客户端)之间的通信。
AIDL例子如下:
服务端:
1,创建新的Android工程,然后新建AIDL文件IMyAidlInterface
,此时运行工程在编译目录下面会看到AIDLService.java文件,在AIDLService 中声明需要实现的函数名称
2,创建一个Service类,继承服务类Service,并在AndroidMainfest.xml 中注册(注意:此时注册应该声明Action )如下:
<service android:name=".JavaService" android:process=":remote"> <intent-filter > <action android:name="aidl.javaService"></action> </intent-filter> </service>.JavaService为 继承 Service的类
3,在服务类中添加如下代码:
public class MyJavaService extends IMyAidlInterface.Stub { @Override public void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat, double aDouble, String aString) throws RemoteException { Log.d("basicTypes","basicTypes-========================"); } @Override public void init() throws RemoteException { Log.d("JavaService start-servier","================================="); } }init()为自定义函数
客户端:
1,将IMyAidlInterface.aidl在服务端的包全部复制到客户端中,并重新生成工程
2,在客户端添加如下代码,
private IMyAidlInterface imyaidl; private ServiceConnection serconn = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { Log.d("服务绑定","Build service ============================="); imyaidl = IMyAidlInterface.Stub.asInterface(service); try { imyaidl.init(); } catch (RemoteException e) { e.printStackTrace(); } } @Override public void onServiceDisconnected(ComponentName name) { } };
3,绑定启动serson 代码如下:
Log.d("测试开","测评开始"); Intent intent = new Intent(); intent.setAction("aidl.javaService"); //startService(intent); bindService(intent,serconn, BIND_AUTO_CREATE); Log.d("测试结束","测试结束");此时就可以看到客户端与服务器可以通过 AIDL进行通信了。