关于EventBus

EventBus事件发布-订阅总线,是用来进行Activity、Fragment之间(任何组件间都可以)的通信,可在任意处进行订阅,订阅后即可接收到对应的事件并进行操作

1.使用方法

//一般使用默认配置,在onCreate中进行注册,最好在onCreate的最后进行(在所需组件完成初始化后即可,简单起见放在最后,否则可能在接收到事件后使用到的组件还未初始化引起空指针错误)
EventBus.getDefault().register(this)
//在onDestroy中进行注销
EventBus.getDefault().unregister(this)
  
//在发送和接收事件之前需要创建事件类,可根据需求随意创建(也可使用枚举类型),例如:
public class ExampleEvent{
    public int example;
}
//或
public enum ExampleEventEnum{
    EXAMPLE_ONE,
    EXAMPLE_TWO
}
  
//使用‘@Subscribe(boolean sticky,ThreadMode,int priority)’注解标记订阅方法用来接收eventBus事件,例如:
@Subscribe(sticky = false,ThreadMode = ThreadMode.MAIN,priority = 0)
public void onEvent(ExampleEvent event){
    XXXXXX;
}
//sticky为粘性标记,是否可以接收到粘性事件,粘性的意思就是可以先发送事件再注册EventBus也能收到事件
//ThreadMode为线程标记,存在POSTING,MAIN,BACKGOUND,ASYNC四种类型。POSTING发送与接收在同一个线程;MAIN在主线程调用;BACKGROUND在非主线程接收,如果发送在非主线程则不会进行线程切换;ASYNC为始终都会开启一个新线程
  
EventBus.getDefault().post(new ExampleEvent())//发送普通事件
EventBus.getDefault().postSticky(new ExampleEvent())//发送粘性事件

2.基本原理

1、使用单例模式保持EventBus全局唯一并始终存活

2、保存注册的Activity(Object类型,一般用在Activity或Fragment等具有生命周期的组件中,方便绑定和解绑),使用反射去查找带有@Subscribe注解的方法,保存该方法(Method对象以及注解参数)

3、在使用时发送post,将该对象存入一个Queue,然后不断的从该Queue中取出event,查找到对应的Acitivity(Object类型)和方法,使用反射进行调用

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。