在Android5.0中使用AIDL

1.AIDl是什么 AIDL(Android 接口定义语言) 是 Android 提供的一种进程间通信 (IPC) 机制。我们可以利用它定义客户端与服务使用进程间通信 (IPC) 进行相互通信时都认可的编程接口。在 Android 上,一个进程通常无法访问另一个进程的内存。 尽管如此,进程需要将其对象分解成操作系统能够识别的原语,并将对象编组成跨越边界的对象。编写执行这一编组操作的代码是一项繁琐的工作,因此 Android 会使用 AIDL 来处理。通过这种机制,我们只需要写好 aidl 接口文件,编译时系统会帮我们生成 Binder 接口。
2.怎么生成AIDL 点击右键--->New--->AIDL
在最新的AndroidStudio版本中,不需要Rebuild即可生成AIDL的java文件,
在生成的AIDL文件中可以定义你的返回类型,AIDL支持的类型:
1. Java 的基本数据类型
2.List 和 Map
【在Android5.0中使用AIDL】3.其他 AIDL 生成的接口
4.实现 Parcelable 的实体(实现 Parcelable 接口是为了后序跨进程通信时使用)
在Android5.0中使用AIDL
文章图片
生成的AIDL文件 你可以在你的AIDL文件中定义你想要的返回类型和方法名称,生成的AIDL文件会显示在你的/src/main下面的aidl文件夹中
2.AIDL的示范 新建一个Service,这个service需要在你的AndroidManifest中进行注册。
在Android5.0中使用AIDL
文章图片
注册Service Intent Filter就是 用来注册 Activity 、 Service 和 Broadcast Receiver 具有能在某种数据上执行一个动作的能力。使用 Intent Filter ,应用程序组件告诉 Android ,它们能为其它程序的组件的动作请求提供服务,包括同一个程序的组件、本地的或第三方的应用程序。
在Android5.0中使用AIDL
文章图片
图2 IMyAidlInterface就是你新建的AIDL的文件名,IMyAidlInterface.Stub是编译器替你生成,假如没有自动生成,Rebuild项目即可。
3.AIDL的使用

在Android5.0中使用AIDL
文章图片
图3 在android5.0中,隐式调用service会报错,解决办法就是加上
intent.setPackage("你的包名"); 这一句代码
在ServiceConnection中,我们会把IBinder传入到
IMyAidlInterface中的Stub的asInterface方法中,这个方法的作用是将IBinder对象转换为IMyAidlInterface接口,如果需要,生成代理。生成的这份代理中就有我们所需要的返回方法
在Android5.0中使用AIDL
文章图片

    推荐阅读