• 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接口异步调用
  • 相关阅读:
    kafka副本
    kafka消息丢失
    kafka消费者
    RN8302b调试笔记
    MDK #pragma anon_unions
    [Python笔记]Strip
    [Python笔记]AnyAll
    [Python笔记]元组
    [Python笔记]列表
    嵌入式平台移植Python
  • 原文地址:https://www.cnblogs.com/lping/p/14704547.html
Copyright © 2020-2023  润新知