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的接口。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,240评论 25 709
  • Android跨进程通信IPC整体内容如下 1、Android跨进程通信IPC之1——Linux基础2、Andro...
    隔壁老李头阅读 13,630评论 11 44
  • 时间过得太快,不知不觉已经到了2月,假期也接近了尾声,还记得在放假回家前,信誓旦旦的制定了假日的每日学习计划: 1...
    Sunny邹旭阅读 1,176评论 4 0
  • 最近开发遇到一个问题,如果一个UICollectionView需要等分屏幕时,有些情况会出现缝隙的情况。 这个原因...
    alpha_feng阅读 6,872评论 0 7
  • 这一日三界众仙云集,天宫万年都没有这样的热闹场面,我坐在云端之上,俯瞰整个天宫,天河的水仍然源源不绝,只是一端是天...
    未慈阅读 1,209评论 0 2