EventBus 3.x 的快速使用

作者: ayuhani | 来源:发表于2018-02-26 13:38 被阅读56次

    这是自己工作中的一篇笔记。
    文章已同步至 CSDN:http://blog.csdn.net/qq_24867873/article/details/79376401

    EventBus 可以很方便地进行各组件间的通信,解耦性更强,比广播更好用。

    快速使用

    1. 编译
    compile 'org.greenrobot:eventbus:3.1.1'
    
    2. 自定义事件类
    public class MessageEvent {
    
        // 成员变量根据自己的需求创建
        private int type;
    
        // 通过构造方法传递数据
        public MessageEvent(int type) {
            this.type = type;
        }
    
        public int getType() {
            return type;
        }
    
        public void setType(int type) {
            this.type = type;
        }
    }
    
    3. 注册事件与解除注册

    一般来说,在 OnCreate() 方法中进行注册:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_layout);
        EventBus.getDefault().register(this);
    }
    

    与之对应的,在 OnDestroy() 中解除注册:

    @Override
    protected void onDestroy() {
        super.onDestroy();
        EventBus.getDefault().unregister(this);
    }
    
    4. 发送事件
    EventBus.getDefault().post(new MessageEvent(type));
    
    5. 接收与处理事件
    /**
    * @Subscribe 注解必须要写,线程需要指定
    * 方法名可随意
    */
    @Subscribe(threadMode = ThreadMode.MAIN)
    public void onMessageEvent(MessageEvent event) {
        switch (event.getType()){
            // do your thing
        }
    }
    

    上面提到了线程模型,它一共有 5 种:

    • POSTING(默认): 事件处理方法的线程跟发布事件的线程是同一个线程;
    • MAIN:在 Android 中,事件处理方法在主线程 (UI线程) 中调用,不能进行耗时操作;
    • MAIN_ORDERED:在 Android 中,事件处理方法在主线程 (UI线程) 中调用。 与 MAIN 不同的是,该事件将始终排队等待发布,这确保了事件发布不会被阻塞;
    • BACKGROUND:在 Android 中,事件处理方法在后台线程中调用,因此不能进行 UI 操作。如果发布事件的线程是主线程 (UI线程),那么事件处理函数将会开启一个后台线程,如果果发布事件的线程是在后台线程,那么事件处理函数就使用该线程;
    • ASYNC:无论事件发布的线程是哪一个,事件处理方法始终会新建一个子线程运行,不能进行 UI 操作。

    以上便是 EventBus 的最基本的使用,是不是很方便呢。

    欢迎关注我的微信公众号

    相关文章

      网友评论

        本文标题:EventBus 3.x 的快速使用

        本文链接:https://www.haomeiwen.com/subject/zusipxtx.html