IPC之Messenger、AIDL

422 阅读1分钟

1、 Messenger

Messenger 是一种轻量级的IPC 方案。它可以在不同的进程中传递 Massage 对象,我们可以把数据放到Massage中就可以做到跨进程传递了。

Messenger 的使用很简单,它对 AIDL 做了封装,使我们可以更简便的跨进程通信,但是它一次只能处理一个请求,如果有大量并发请求就不太合适。

Messenger工作原理图(来源于《Android开发艺术探索》)

Messenger 的简单使用:

juejin.cn/post/684490…

2、AIDL

blog.csdn.net/qian520ao/a…

这篇文章已经写的非常细致了,以下是个人笔记。

github.com/Tkorn/aildd…

根据《Android开发艺术探索》写的demo

  • AIDL,Android Interface Definition(Android接口定义语言), 系统会根据我们写的 .aidl 文件生成对应的 .java 文件,帮助我们更简单的实现跨进程通讯。
  • 客户端和服务器拿到的数据并不是同一个对象,是经过序列化和反序列化后内容相同的两个对象。
  • 服务端创建 Binder 的实例,客户端拿到服务端创建的 Binder 的引用。它们通过 Binder 进行数据交互。
  • Binder 工作机制图(来源于《Android开发艺术探索》)
  • 远程方法执行在 Binder 线程池中,不要在UI线程或主线程中调用。
  • Binder 是有意外可能死亡的,这往往是服务端进程意外停止导致的,这是我们需要重新连接服务器。有两种方法,一是设置 Binder 的 DeathRecipient 监听,当 Binder 死亡时我们会收到 binderDied() 的回调,在这里重新连接服务器。二是在 onServiceDisconnected() 中重新连接。两种的区别是 binderDied() 是在 Binder 的线程池中被调用。 onServiceDisconnected() 在客户端的 UI 线程中。