AIDL介绍
AIDL全称Android Interface Definition Language 安卓接口定义语言,是Android开发中常用的一种跨进程通信的方式。
使用AIDL编写的文件是aidl文件,aidl文件在程序运行中并不起作用,起作用的是Android SDK工具基于aidl文件生成的Java语言的IBinder接口。这也意味着,你可以自定义IBinder接口来实现AIDL相同的效果。
AIDL的使用
Server端
创建.aidl文件
package com.example.android
interface IRemoteService {
void setBookName(String name);
int getBookId();
}
AIDL 支持下列数据类型:
Java基本数据类型(如 int、long、char、boolean 等)、String、CharSequence、List、Map
实现接口
创建Binder类的实例,实现aidl中的方法
private final IRemoteService.Stub binder = new IRemoteService.Stub() {
public int getBookId(){
return 1;
}
public void setBookName(String aString) {
// Does nothing
}
};
向客户端公开接口
通过Service的onBind方法,向客户端返回Binder对象。
public class RemoteService extends Service {
@Override
public void onCreate() {
super.onCreate();
}
@Override
public IBinder onBind(Intent intent) {
// Return the interface
return binder;
}
private final IRemoteService.Stub binder = new IRemoteService.Stub() {
public int getBookId(){
return 1;
}
public void setBookName(String aString) {
// Does nothing
}
};
}
Client端
- 将客户端的.aidl文件复制到项目中
- 声明一个 IBinder 接口实例(基于 AIDL 生成)。
- 实现 ServiceConnection。
- 调用 Context.bindService(),从而传入您的 ServiceConnection 实现。
- 在 onServiceConnected() 实现中,您将收到一个 IBinder
深入理解AIDL:跨进程通信详解

本文详细介绍了AIDL(Android Interface Definition Language),一种用于Android进程间通信(IPC)的技术。文章从AIDL的基本概念、使用方法、Server端和Client端的实现细节、通信过程、AIDL关键字解析、生成的文件结构以及AIDL回调接口等方面进行了阐述,还探讨了AIDL的开发优化策略,包括如何根据服务需求返回不同Binder以及通过版本标识管理接口更新。
最低0.47元/天 解锁文章
1625

被折叠的 条评论
为什么被折叠?



