aidl学习
跨进程如何传递数据
- 两个进程无法
直接
通信 - 通过android系统底层
间接
通信
AIDL:android interface definition language
android接口定义语言
慕课网视频学习地址
默认支持数据类型
- 基本数据类型
- String,CharSequence
- List,Map
- Parcelable
步骤
如需使用 AIDL 创建绑定服务,请执行以下步骤:
-
创建 .aidl 文件
此文件定义带有方法签名的编程接口。
package com.example.android;
interface IRemoteService {
int getPid();
void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat,
double aDouble, String aString);
}
```
-
实现接口
Android SDK 工具基于您的 .aidl 文件,使用 Java 编程语言生成一个接口。此接口具有一个名为 Stub 的内部抽象类,用于扩展 Binder 类并实现 AIDL 接口中的方法。您必须扩展 Stub 类并实现方法。private final IRemoteService.Stub mBinder = new IRemoteService.Stub() { public int getPid(){ return Process.myPid(); } public void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat, double aDouble, String aString) { // Does nothing }
};
```
-
向客户端公开该接口
实现 Service 并重写 onBind() 以返回 Stub 类的实现。public class RemoteService extends Service { @Override public void onCreate() { super.onCreate(); } @Override public IBinder onBind(Intent intent) { // Return the interface return mBinder; } private final IRemoteService.Stub mBinder = new IRemoteService.Stub() { public int getPid(){ return Process.myPid(); } public void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat, double aDouble, String aString) { // Does nothing } };
}
```
调用步骤
调用 IPC 方法
调用类必须执行以下步骤,才能调用使用 AIDL 定义的远程接口:
- 在项目 src/ 目录中加入 .aidl 文件。
- 声明一个 IBinder 接口实例(基于 AIDL 生成)。
- 实现 ServiceConnection。
- 调用 Context.bindService(),以传入您的 ServiceConnection 实现。
- 在您的 onServiceConnected() 实现中,您将收到一个 IBinder 实例(名为 service)。调用 YourInterfaceName.Stub.asInterface((IBinder)service),以将返回的参数转换为 YourInterface 类型。
- 调用您在接口上定义的方法。您应该始终捕获 DeadObjectException 异常,它们是在连接中断时引发的;这将是远程方法引发的唯一异常。
- 如需断开连接,请使用您的接口实例调用 Context.unbindService()。
步骤未官网上介绍步骤具体跳转官网