AIDL即Android Interface Definition Language(安卓接口定义语言),当我们创建了这个接口后,系统会自动生成其对应的Binder类,它继承了IInterface, 内部有一个静态抽象类Stub和Stub内部的Proxy类。其中Stub继承了Binder类,所以AIDL中的Stub即为一个Binder对象。
综上AIDL定义的接口,它除了是一个接口以外,它还是一个Binder对象,支持在接口和Binder之间相互转换(asBinder(), asInterface())。
结下,它的们共同点和差异的地方:
1.他们都与IPC(远程)调用有关。
2.本质不同,Binder是一个对象,继承了IBinder对象,你可以借助它来自定义RPC协议。AIDL是android提供的接口定义语言,借助这个工具,你可以很轻松地实现IPC通信机制,根据需要灵活定义接口,
3.作用范围不同。如果是在一个应用里实现远程调用,使用Binder即可,没必要使用AIDL。如果涉及到在多个应用程序之间使用IPC通信,并且在服务又有多线程业务处理,这时可以使用AIDL。
原文链接:https://blog.csdn.net/u010291868/article/details/73359890
Binder:Linux的动态内核可加载模块。可单独编译,不可独立运行。
它在运行时被链接到内核作为内核的一部分裕兴。
Android系统动态添加一个内核模块运行在内核空间。
内核模块运行在内核空间,用户进程之间通过这个内核模块作为桥梁来实现通信。
——Binder驱动 Binder Driver