Messenger和IMessenger接口

因为是同步queue(队列)处理消息,多以service类的开发者不必担心多线程的安全问题,这就叫单线程环境(单线程开发程序),不管多少线程来,主线程都是一个一个吃.

Messenger是单线程,aidl是多线程.

通过Messenger来包装IBinder接口,让其跨进程的将Message对象传递到另一个进程中,

由于Message实现了Pracelable接口,所以Messenger类可以透过IBinder接口而降Messae对象传到另一个进程里的MessengerImpl类

之后,Messenger通过Handler将Message对象丢入UI线程的MQ中,让ui线程处理


Service创建一个Handler对象,并诞生一个Messenger对象,让Messenger指向该handler

于是,Messenger对象调用Handler的getIMessenger去诞生一个MessengerImpl对象,并让Messenger对象指向MessengerImpl对象,

此时,MessengerImpl对象也指向Handler对象


调用send函数,此send函数则调用IBinder接口的transact函数,讲Message对象传递给MessengerImpl,再透过Handler讲message讲message对象放入主线程的MQ中;

Binder框架双向沟通一般的应用场景是当aty透过IBinder接口调用service时,万一发现底层系统故障了,service必须通过IBinder接口来通知aty,

是用Messenger来包装,这就是双向Messenger的框架

原理上,将IBinder接口打包到Message里.随着信件送到对方,就接到IBinder接口了




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值