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

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

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

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

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

注意:

a.只有当你需要来自不同应用的客户端通过IPC通信来访问你的服务时,并且想在服务里处理多线程的业务,这时就需要使用AIDL。

b.如果你不需要同时对几个应用进程IPC操作,你最好通过实现Binder接口来创建你的接口。

c.如果你仍需要执行IPC操作,但不需要处理多线程,使用Messenger来实现接口即可。

d.无论如何,在实现AIDL之前确保你完全理解Bound Service相关知识。

总结下,它的们共同点和差异的地方:

1.他们都与IPC(远程)调用有关。

2.本质不同,Binder是一个对象,继承了IBinder对象,你可以借助它来自定义RPC协议。AIDL是android提供的接口定义语言,借助这个工具,你可以很轻松地实现IPC通信机制,根据需要灵活定义接口,

3.作用范围不同。如果是在一个应用里实现远程调用,使用Binder即可,没必要使用AIDL。如果涉及到在多个应用程序之间使用IPC通信,并且在服务又有多线程业务处理,这时可以使用AIDL。

最新文章

  1. PHP 天巡机票接口
  2. php请求返回GeoJSON格式的数据
  3. 学习ASP.NET MVC(六)——我的第一个ASP.NET MVC 编辑页面
  4. broadcom代码中httpd进程启动流程介绍
  5. 弱类型变量原理探究(转载 http://www.csdn.net/article/2014-09-15/2821685-exploring-of-the-php)
  6. SVG绘制矩形简单示例分享
  7. Extjs4 关于Store的一些操作(转)
  8. null的小扩展
  9. 使用brew安装软件
  10. How Django works?
  11. eclipse:eclipse for java EE环境下如何配置tomcat服务器,并让tomcat服务器显示在控制台上,将Web应用部署到tomcat中
  12. [NOIP2014]飞扬的小鸟 D1 T3 loj2500 洛谷P1941
  13. Django表单字段汇总
  14. 2018-10-19 Chrome插件实现GitHub代码离线翻译v0.0.4
  15. win32网络模型之重叠I/O
  16. shell-dict-uniq-count
  17. Properties类和如何操作属性
  18. sqlite3数据库的简要应用
  19. Spring集成Mybatis(Dao方式开发)
  20. [Xamarin.Android]使用Java Bindings Libary專案 Binding Java元件(.jar) 與Metadata.xml、型別對應 (转帖)

热门文章

  1. 【BZOJ4566】[Haoi2016]找相同字符 后缀数组+单调栈
  2. 【转】 JS实现HTML标签转义及反转义
  3. 一起做RGB-D SLAM调试
  4. IOS And WCF 上传文件
  5. Es 中一个分片一般设置多大
  6. netty + Protobuf (整合二)
  7. Java 之综合练习
  8. Python(进程池与协程)
  9. 查找至少连续出现三次的所有数字/连续3天的日期【LeetCode】
  10. Boost scoped_ptr scoped_array 以及scoped_ptr与std::auto_ptr对比