AndroidEventBus初试

Eventbus是一个发布/订阅的事件总线。

arch

四元素分别是发布者,订阅者,事件及总线。

1.  订阅者通过EventBus.getDefault().register(this);订阅事件

                         EventBus.getDefault().unregister(this);//取消订阅

2.  发布者通过EventBus.getDefault().post(object);发布事件

     AndroidEventBus还包含了一个tag参数。EventBus.getDefault().post(object,tag);

3.  最重要的是区别Evenbus 和 AndroidEventBus

      网上大部分都是基于greenrobot的Eventbus的,但实际上AndroidEventBus的@Subscriber(tag = blabla , mode = blabla)好用无比,它可以通过不同的tag通知不同的订阅者处理不一样的工作,相比之下,greenrobot的Eventbus只根据函数的参数类型来区别和接受消息,非常局限而且不灵活。mode的类型包括:

1.ThreadMode.POST 执行在POST函数的线程中

2. ThreadMode.ASYNC 异步执行

3. ThreadMode.MAIN,  执行在UI线程中

这个和greenrobot的Eventbus的4个线程类型大同小异,即

1. MainThread:事件响应函数会在Android应用的主线程(大部分情况下都是UI线程)中执行。即:public void onEventMainThread()

2. PostThread:事件响应函数和事件发布在同一线程中执行。这个是默认值,这样可以避免线程切换。

3. BackgroundThread:事件响应函数会在一个后台线程中执行。如果事件发布函数不是在主线程中,则会立即在事件发布线程中执行响应函数。如果事件发布函数在主线程中,EventBus则会在唯一的一个后台线程中按照顺序来执行所有的后台事件响应函数。
上面的3种事件响应函数,应该能够很快的执行完,不然的话会阻塞各自的事件发布。
4. async:事件响应函数在另外一个异步线程中执行。该线程和发布线程、主线程相互独立。如果事件响应函数需要较长的时间来执行,则应该使用该模式,例如 网络访问等。需要注意的是,由于系统并行的限制,应该避免在同一时间触发大量的异步线程。 EventBus使用一个线程池来提高线程的效率。


但感觉不好用的地方是,不如自定义设计Listener接口去监听消息的针对性强,如果几个订阅者都订阅了一个事件,但需要针对不同的发布者做出的同一事件以作区别就办不到了。。譬如目前这个备份项目,在用户手动备份完成时需要弹出提示框,自动备份的时候不需要弹出提示框,自动备份和手动备份都调用了同一函数进行备份,备份完成时post消息,这时候手动备份界面可能会接到了自动备份的post消息从而弹出了提示框。解决办法只能通过另设标志符。


Eventbus地址:https://github.com/bboyfeiyu/AndroidEventBus

                             https://github.com/greenrobot/EventBus

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值