这个组件是一个简单小巧的Handler转发,主要是为了对外提供绑定目标Handler对象的所有消息的 暂停 、 恢复 、 废弃 、 取消所有队列中的消息 ,用于整个完全解耦消息队列的全局性有效管理。
ENGLISH
随着RxJava的普及,逐渐有一些文章出来,提出了EventPool/Handler这些抛事件的架构已死或不建议使用的说法,而无非就是不易于调试,不够灵活。
个人觉得确实很多事务用RxJava可以解决。但是就解耦,全局的大架构,还是这类抛事件的更易于阅读代码更加干净,甚至更易于全局性控制。如picasso,业务非常的复杂,因此内部使用了Handler抛事件的方式来促使事务流的运作。
简述所解决问题
系统提供的Handler用于解决跨线程抛消息,复杂的事务流固然方便,但是缺少全局性的控制,如暂停,恢复等,故有了这个基于 android.os.Handler 进行上层封装转发实现全局控制功能的组件。
Demo
在项目中引用
dependencies {
compile 'cn.dreamtobe.messagehandler:messagehandler:0.0.9'
}
使用场景
如demo中的,需要全局暂停、恢复、清理、干掉整个消息队列,比如有复杂交错的消息传递逻辑需要全局性控制,这个 MessageHandler 将会有奇效。
使用
所有方法都是线程安全
| 方法名 | 功能 |
|---|---|
| pause(void) | 暂停所有消息(所有delay的事件在这个时刻冻结),暂停期间有任何消息也一并冻结 |
| resume(void) | 恢复所有消息(根据冻结时刻的事件,解冻delay的时间,重新发送消息) |
| cancelAllMessage(void) | 清理所有已经在队列中等待触发的消息 |
| killSelf(void) | 废弃当前Handler,不再接受任何消息处理 |
以下接口与Handler中提供的功能相同
| 方法名 | 功能 |
|---|---|
| sendEmptyMessage(what) | 同 Handler#sendEmptyMessage |
| sendEmptyMessageDelayed(what, delayMillis) | 同 Handler#sendEmptyMessageDelayed |
| sendMessage(msg) | 同 Handler#sendMessage |
| sendMessageDelayed(msg, delayMillis) | 同 Handler#sendMessageDelayed |
| sendMessageAtTime(msg, uptimeMillis) | 同 Handler#sendMessageAtTime |
| sendMessageAtFrontOfQueue(msg) | 同 Handler#sendMessageAtFrontOfQueue |
| post(runnable) | 同 Hanler#post |
| postDelayed(runnable, delayMillis) | 同 Hanler#postDelayed |
| removeMessages(what) | 同 Handler#removeMessages |
| removeCallbacks(runnable) | 同 Handler#removeCallbacks |
| obtainMessage(void):Message | 同 Handler#obtainMessage |