Android消息传递之EventBus

EventBus产生需求背景:

    在做项目的时候往往需要应用程序内各组件间、组件与后台线程间的通信。比如耗时操作,等耗时操作完成后通过Handler或Broadcast将结果通知给UI,N个Activity之间需要通过Listener通信,其实这些都可以通过EventBus轻松实现,EventBus通过发布/订阅(publish/subscribe)方式来管理事件总。EventBus通过注解和反射机制 将订阅者连同订阅函数保存起来,然后在发送订阅的时候 遍历订阅函数数组进行调用,其实从这方面就可以EventBus执行效率多少会受到一点影响。

   github地址:https://github.com/greenrobot/EventBus

EventBus主要角色:

  •  Event 传递的事件对象
  •  Subscriber  事件的订阅者 
  •  Publisher  事件的发布者
  •  ThreadMode 定义函数在何种线程中执行
  •   官网给出的各种角色的协作图

  • EventBus配置:

      EventBus框架也是采用建造者模式设计的,可以通过EventBusBuilder来设置一些配置信息,例如设置debug模式下要抛出异常

    • EventBus示例:

       之前做图片类项 的时候,需要处理一个点赞数据的同步,比如在作品的详情页点赞 需要同时更新列表页该作品的点赞数量,这里还是以此为例。 

    •  1.)build.gradle添加引用 

      compile 'org.greenrobot:eventbus:3.0.0'

      2.)定义一个事件类型

      public class DataSynEvent {
          private int count;
      
          public int getCount() {
              return count;
          }
      
          public void setCount(int count) {
              this.count = count;
          }
      }

      3.)订阅/解除订阅

    • 订阅

      EventBus.getDefault().register(this);//订阅

       解除订阅

      EventBus.getDefault().unregister(this);//解除订阅

      4.)发布事件

      EventBus.getDefault().post(new DataSynEvent());

      5.)订阅事件处理

       @Subscribe(threadMode = ThreadMode.MAIN) //在ui线程执行
          public void onDataSynEvent(DataSynEvent event) {
              Log.e(TAG, "event---->" + event.getCount());
          }

       

posted @ 2017-12-19 14:21  太保  阅读(322)  评论(0编辑  收藏  举报