美文网首页
AIDL学习记录

AIDL学习记录

作者: DOAING | 来源:发表于2018-06-24 14:14 被阅读0次

    https://developer.android.google.cn/guide/components/aidl

    一 实际创建步骤:

    1.在服务module上创建一个AIDL文件夹(图一)

    图1

    2 创建在刚刚创建的文件夹下创建AIDL文件(图二)

    图二

    3 编写AIDL文件(图三)自定义一个方法。

    图三

    android studio 需要手动编译aidl文件一下,生成对应的Java 文件。

    图四

    4 编写服务端service 类(图五)

    图五

    “Android SDK 工具会生成一个以 .aidl 文件命名的 .java 接口文件。生成的接口包括一个名为 Stub的子类,这个子类是其父接口(例如,YourInterface.Stub)的抽象实现,用于声明 .aidl 文件中的所有方法。如需实现 .aidl 生成的接口,请扩展生成的 Binder 接口(例如,YourInterface.Stub)并实现从 .aidl 文件继承的方法。服务实现该接口后,就需要向客户端公开该接口,以便客户端进行绑定。 要为您的服务公开该接口,请扩展Service并实现onBind(),以返回一个类实例,这个类实现了生成的 Stub。”

    ----------------做具体的工作需要在service 里边声明一个binder接口,这个接口由创建的aidl文件.Stub 的方法返回。也就是aidl里面的声明的自定义方法由这里真正的去实现。比如这里是传入客户端的两个整数,返回他俩合。

    6 编写客户端代码(图六)

    这里需要用显示的方式去开启服务端,注意服务端注册的服务的时候:

    设置exported为true默认是false,不然无法通过其它进程启动这个service

    客户端启动服务端服务的代码:

    图六

    “当客户端(如 Activity)调用 bindService() 以连接此服务时,客户端的 onServiceConnected() 回调会接收服务的 onBind() 方法返回的 mBinder 实例。当客户端在 onServiceConnected() 回调中收到 IBinder 时,它必须调用xxxx.asInterface(service) 以将返回的参数转换成 xxxx 类型。"(图七)

    ----------------------用stub.asinterface 方法获取底层的代理,这个代理可以调用服务端的方法,也就是通过这个方法实现了客户端对服务端的操作。比如返回的是IMyAidlInterface,之后九可以通过这个变量进行客户端对服务端的操作了。

    图七

    "客户端还必须具有对 interface 类的访问权限,因此如果客户端和服务在不同的应用内,则客户端的应用 src/ 目录内必须包含 .aidl 文件(它生成 android.os.Binder 接口 — 为客户端提供对 AIDL 方法的访问权限)的副本。"

    -----------------需要在客户端创建一个跟服务端一模一样的aidl包跟aidl文件,拷贝一下就行(图八)

    图八

    7 客户端调用服务端方法

    上边通过创建的ServiceConnection 方法获取了服务端的代理,设置了返回为全局变量。这样就可以使用这个代理去调用的服务端的方法了,例子(图九)

    图九

    aidl里边声明了这个方法,客户端通过返回的远程代理可以直接调用服务端这个方法,并且还能得到返回值。

    相关文章

      网友评论

          本文标题:AIDL学习记录

          本文链接:https://www.haomeiwen.com/subject/oibjyftx.html