Android aidl总结

AIDL是Android Interface definition language的缩写,它是一种android内部进程通信接口的描述语言,通过它我们可以定义进程间的通信接口。

 

定义一个AIDL接口

  1. 建立.aidl文件

    这个文件使用方法签名定义了语言接口

  2. 实现这个接口

    Android SDk工具基于你的.aidl文件使用java语言生成一个接口 这个接口有一个内部抽象类,叫做Stub,它是继承Binder并且实现你AIDL接口的 你必须继承这个Stub类并且实现这些方法

  3. 暴露这个接口给客户端

    实现一个service并且覆盖onBind()方法返回你的Stub实现类

 

跨进程传递对象

  1. 要实现Parcelable接口
  2. 实现writeToParcel,它是用来把对象的当前状态写入到一个Parcel对象中的。
  3. 在你的类中添加一个叫CREATOR的静态域,它要实现Parcelable.Creator接口
  4. 最后,建立一个.aidl文件声明你的parcelable类

    如果你使用一个定制的构建过程,不要构建.aidl文件。与C语言中的头文件类似,.aidl文件不会被编译

 

调用一个IPC方法

  1. 在项目中的src目录下面导入.aidl文件
  2. 声明一个IBinder接口(基于AIDL生成的)的实例
  3. 实现ServiceConnection
  4. 调用Context.bindService(),传递到你的ServiceConnection实现中。
  5. 在你的onServiceConnected()实现中,你会收到一个IBinder实例(称为服务端) 调用YourInterfaceName.Stub.asInterface((IBinder)service)把返回值映射到YourInterface类型上面
  6. 调用你接口中定义的方法 你应该捕获当连接损坏时抛出的DeadObjectException异常,这是远程方法唯一会抛出的异常
  7. 使用你接口的实例调用Context.unbindService()来断开连接

调用IPC服务端的一些注释:

  • 对象跨进程时是引用计数的
  • 你可以传递一个匿名对象作为方法的参数

aidl关键字

in:数据仅由Client流向Server端
out:Server端创建一个对象,流向Client端
inout:双向流通
oneway:Binder接口异步调用
原文地址:https://www.cnblogs.com/lping/p/14704547.html