主要流程
使用messenger传递message,通过handler进行处理,完成ipc通讯
- 客户端,收到服务端binder之后转成messenger对象,然后send发送message会触发服务端的Handler#handleMessagae
- 服务端创建自己的service,然后在onBind方法中返回messenger.getBinder
源码分析
服务端
1 | public class MessengerService extends Service { |
客户端
1 | public final class Messenger implements Parcelable { |
注意事项
- Messenger 一次只处理一个请求,是串行执行的,因此在服务端不用考虑线程同步的问题,这有点类似于 IntentService 中的串行问题,因为都是使用的 Handler、MessageQueue 机制。
- Messenger 只能用来传递消息,不能跨进程调用远程的方法。
- msg.obj 只能传输系统实现了 Parcelable 接口的对象,一般情况下也不要使用 obj 这个字段跨进程传输,可以使用 Bundle 对象来替代 obj,Bundle 可以支持大量的数据类型。