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接口了




你可能感兴趣的:(Messenger和IMessenger接口)