阅读 413

EventBus的简单使用

由greenrobot组织贡献(该组织还贡献了greenDAO),一个Android事件发布/订阅轻量级框架,

功能:通过解耦发布者和订阅者简化Android事件传递

EventBus可以代替 Android传统的Intent,Handler,Broadcast或接口函数,在Fragment,Activity,Service线程之间传递数据,执行方法。

特点:代码简洁,是一种发布订阅设计模式(观察者设计模式)。

EventBus源码下载 


 EventBus的使用场景

  • 用于线程间的通讯代替handler或用于组件间的通讯代替Intent

  • 广泛用于团购,商城,社交等应用,比如易大师APP,易宸锋Application...

  • 实践证明已经有一亿多的APP中集成了EventBus


 EventBus的优势

  • 简化了组件间的通讯。

  • 分离了事件的发送者和接受者。

  • 在Activity、Fragment和线程中表现良好。

  • 避免了复杂的和易错的依赖关系和声明周期问题。

  • 使得代码更简洁,性能更好。

  • 更快,更小(约50k的 jar包)

 

 EventBus原理图

  • EventBus底层采用的是注解和反射的方式来获取订阅方法信息(首先是注解获取,若注解获取不到,再用反射)

  • 当前订阅者是添加到Eventbus 总的事件订阅者的subscriptionByEventType集合中

  • 订阅者所有订阅的事件类型添加到typeBySubscriber 中,方便解注册时,移除事件

                        

 EventBus使用

        第一步:添加依赖     

       compile 'org.greenrobot:eventbus:3.0.0'复制代码

        第二步:定义消息事件类

   public class MessageEvent{
    private String message;
    public  MessageEvent(String message){
        this.message=message;
    }
 
    public String getMessage() {
        return message;
    }
 
    public void setMessage(String message) {
        this.message = message;
    }
}复制代码
         第三步:注册和解除注册

             你的事件在哪接收,就在哪个类进行EventBus的注册和解除操作

           

   @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
                  super.onCreate(savedInstanceState);
                  setContentView(R.layout.main_activity);
                  EventBus.getDefault().register(this);复制代码

   

   @Override   
       protected void onDestroy() {         
                 EventBus .getDefault().unregister(MainActivity.this);       
                 super.onDestroy(); }复制代码


          第四步:post方法发送事件

         

            EventBus.getDefault().post(new MessageEvent("我是九重透流"));

          

          第五步:接收事件

       

      @Subscribe(threadMode = ThreadMode.MAIN)
           public void Event(MessageEvent messageEvent) {
           Lod.d("eventbus",messageEvent.getMessage());
    }
复制代码

        总结

                     在进行组件、页面间通信的时候,EventBus是一个不错的选择。