AIDL 进程间通信

1.Binder 机制

binder 是一个框架 分为客户端,服务端,驱动。

初始化一个binder类的对象后,自身是 一个对象,也会在驱动里生成一个对应的mBinder对象。客户端获取这个binder对象即可以对远程的服务端binder调用了。

所以,调用binder一个是重写服务端的binder类中的onTransact()方法,在这里实现 真正的业务。另外一个就是在客户端获得驱动中该binder的对象,并且调用其中的transact()方法,这时过程就是,客户端进程进入驱动,驱动挂起进程,向远程服务端发送一个消息包裹,包含了客户端传进来的请求。远程服务端执行对应的方法内容,打包为 reply并且 发送一个notify的消息给驱动,驱动把包裹给客户端获取的对象,同时恢复线程。

2.AIDL使用

可以完全使用Binder对系统的服务进行扩展,但是对应用程序自定义的服务就需要用到service。就要用到AIDL,AIDL是一个命令行程序,可以将对应的aidl文本生成相应的java文件。其有 对应的语法 和java基本相同。

使用流程

 第一,写服务端的binder 。写一个aidl文件,编译 之后会对应生成其java文件 。

编译出的文件主要做了三件事:第一个,是生成一个接口,其父类是IIterface,继承下来一个asBinder()方法。

第二个,是生成一个Poxy代理类,该类也实现了接口(也就是自己定义的),其中的接口里面方法的主要作用是对参数进行按照顺序打包,交给也就是Stub(第三件事)进行处理,包括约定好的用于判定是哪一个的常量。

第三个,是写了一个Stub的抽象类,其父类是Binder类,并且实现接口(自己定义的),并且复写里面的方法inTransact(),在里面调用接口里面的 方法(由于是抽象类 ,所以这些方法需要自己完成里面的内容)。这个类 里面提供了一个asInterface()的方法,该方法如果的作用是如果是在本地服务端binder请求调用该服务就直接调用,不在通过binder驱动调用,如果是远程的调用则就会远程调用。

 第二,写一个自定义的service类,其中在 public IBinder onBind(Intent t){   return mBinder;     } 中返回上面的Stub抽象类,并且实现里面的方法,暴露出binder对象。

第三,在客户端获取服务端对应的binder,也就是在服务端启动以后,对应的binder驱动中的服务端的对应对象,其和服务端对象是两个对象。在绑定服务的时候,绑定成功,会回调 ServiceConnection中的 onServiceConnected(ComponentName className,IBinder service)方法,所以在客户端复写这个接口,重写里面的方法,将service保存到本地,即可调用对应的方法了。


AIDL提供了桥梁,客户端是通过本地的代理来请求,服务端是通过本地的代理来返回,真正的通信是在驱动中完成的。两者需要一个共同的规范所以需要用到AIDL。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
AIDL(Android Interface Definition Language)是Android中用于进程间通信(IPC)的一种机制。它允许不的应用程序或在不同的进程进行通信。下面是对AIDL进程间通信的详细讲解: 1. 定义接口:首先,你需要创建一个AIDL接口,该接口包含用于进程间通信的方法和数据类型。AIDL接口文件通常以`.aidl`为后缀名,放置在`src/main/aidl`目录中。在接口中定义的方法参数和返回值只能使用支持的数据类型、其他AIDL接口或Parcelable对象。 2. 实现接口:在服务端应用程序中,你需要实现AIDL接口。实现类需要继承自AIDL接口生成的抽象类,并实现其中的方法。这些方法将用于处理客户端发起的远程调用请求。 3. 注册接口:在服务端应用程序的`AndroidManifest.xml`文件中,使用`<service>`标签注册你的服务,并通过`android:process`属性指定所在的进程。确保在`<intent-filter>`标签中包含正确的action,使得客户端能够找到并与你的服务进行绑定。 4. 创建客户端:在客户端应用程序中,你需要绑定到服务端应用程序中的服务。使用`ServiceConnection`接口来管理与服务的连接和断开连接。当连接成功后,你可以通过AIDL接口提供的方法与服务进行通信。 5. 调用方法:在客户端与服务端建立连接后,你可以通过AIDL接口提供的方法调用服务端的功能。这些方法调用将跨越进程边界执行,并将结果返回给客户端。 6. 处理并发:在处理AIDL进程间通信时,需要注意并发性和线程安全性。多个客户端可能同时访问服务端,因此需要合理地处理并发情况,以保证数据的一致性和安全性。 总结来说,AIDL进程间通信是通过定义接口、实现接口、注册接口、创建客户端和调用方法来实现的。这种机制允许不同进程的应用程序之间进行通信,并共享数据和功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值