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

3.其他 AIDL 生成的接口

4.实现 Parcelable 的实体(实现 Parcelable 接口是为了后序跨进程通信时使用)

生成的AIDL文件

你可以在你的AIDL文件中定义你想要的返回类型和方法名称,生成的AIDL文件会显示在你的/src/main下面的aidl文件夹中

2.AIDL的示范

新建一个Service,这个service需要在你的AndroidManifest中进行注册。

注册Service

Intent Filter就是 用来注册 Activity 、 Service 和 Broadcast Receiver 具有能在某种数据上执行一个动作的能力。使用 Intent Filter ,应用程序组件告诉 Android ,它们能为其它程序的组件的动作请求提供服务,包括同一个程序的组件、本地的或第三方的应用程序。

图2

IMyAidlInterface就是你新建的AIDL的文件名,IMyAidlInterface.Stub是编译器替你生成,假如没有自动生成,Rebuild项目即可。

3.AIDL的使用


图3

在android5.0中,隐式调用service会报错,解决办法就是加上

intent.setPackage("你的包名");这一句代码

在ServiceConnection中,我们会把IBinder传入到

IMyAidlInterface中的Stub的asInterface方法中,这个方法的作用是将IBinder对象转换为IMyAidlInterface接口,如果需要,生成代理。生成的这份代理中就有我们所需要的返回方法

更多相关文章

  1. NPM 和webpack 的基础使用
  2. 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
  3. 读取android手机流量信息
  4. android 使用html5作布局文件: webview跟javascript交互
  5. Android(安卓)多媒体扫描过程(Android(安卓)Media Scanner Proces
  6. android“设置”里的版本号
  7. Android开发环境搭建
  8. Android(安卓)Resource介绍和使用
  9. 2014.01.21 ——— android 关联android-support源码

随机推荐

  1. Android中自定义PopupWindow,动态弹窗。
  2. RelativeLayout实现百分比布局
  3. android 渗透测试必备工具
  4. android开发笔记1:TextView的属性详解
  5. Android ViewDragHelper(1)
  6. Python实现的基于ADB的Android远程工具
  7. android 类型转换 工具函数
  8. Eclipse 重装Android ADT 问题~解决方案-
  9. android的优点与缺点
  10. Android中内存优化