AIDL与Binder的区别

消息队列和管道采用存储-转发方式,即数据先从发送方缓存区拷贝到内核开辟的缓存区中,然后再从内核缓存区拷贝到接收方缓存区,至少有两次拷贝过程。

Binder是一个远程对象的基础类,核心部分是远程调用机制,这部分是由IBinder定义的。

它是对IBinder类的实现,其中IBinder类提供了这样一个类的标准的本地化实现方式。

大多数开发者不会去直接实现Binder类,而是用AIDL工具来描述他们自己想要的接口,借助它来生成一个合适的Binder之类。

AIDL(Android Interface Define Language),是android的一种接口定义语言,类似于IDL。

借助它,你可以定义接口,使得客户端和服务端之间实现进程间通信。对android来说, 一个进程无法通过正常的方法来访问另一个进程的内存空间。可以说,他们需要把对象分解成操作系统可以理解的原子类型,然后使对象突破限制在不同进程之间进行传输。具体实现这种机制的代码写起来非常枯燥,所以android为你提供了AIDL语言来进行处理。

IwifiManager.aidl (frameworks/base/wifi/java/android/net/wifi)编译后,系统会生成IwifiManager.java(out/target/common/obj/java-libraries/framework-intermediates/wifi/java/android/net/wifi/),这个类的存根类继承Binder类,并实现IwifiManager.aidl的接口。

你可能感兴趣的:(AIDL与Binder的区别)