美文网首页
EventBus 3.0 使用笔记

EventBus 3.0 使用笔记

作者: innovatorCL | 来源:发表于2017-04-26 16:24 被阅读259次

    一、概述

    EventBus 是一款针对 Android 优化的发布/订阅事件总线。主要功能是替
    Intent,Handler,BroadCastReceiver 在 Fragment,Activity,Service,线程之间传递消息。
    优点是开销小,代码更优雅。以及将发送者和接收者解耦。

    二、基本使用

    • gradle集成
      compile 'org.greenrobot:eventbus:3.0.0'

    • 自定义需携带传递的参数的类,因为传递的是一个对象,如:

    public class FirstEvent{
            private String mMsg;
            public FirstEvent(String msg){
                mMsg = msg; 
            }
            public String getmMsg(){
                return mMsg;
            }
        }
    
    • 在需要接收消息的 Activity/Fragment 中注册和反注册

      • onCreate() 中注册:EventBus.getDefault().register(this);
      • onDestroy() 中反注册:EventBus.getDefault().unregister(this);
      • 在需要发送信息的时候:EventBus.getDefault().post(event);
    • 重写回调的接收信息和处理的订阅函数,用 @Subscribe + 模式 修饰,如:
      PS: 系统是根据 @Subscriber 这个注解来确定订阅函数的

    @Subscribe(threadMode = ThreadMode.MAIN) 
    public void onEventMainThread(FirstEvent event) {
      String msg = "onEventMainThread收到了消息:" + event.getMsg();
      Log.d("eventbus", msg);
      text1.setText(msg);
      Toast.makeText(this, msg, Toast.LENGTH_LONG).show();
    }
    

    @Subscribe(threadMode = ThreadMode.MAIN)修饰的线程模式有 4 种:

    • ThreadMode.Main:表示这个方法在主线程中执行(适合做异步加载,可以将子线程 加载到数据直接设置到 UI 界面)。

    • ThreadMode.Posting:表示该方法和消息发送方在同一个线程。

    • ThreadMode.ASYNC:表示无论发送方是在子线程还是在主线程,都会开一个新的子线程去运行,适用于多个线程任务,内部有线程池管理,比如请求网络时,用这个方法,他会自动创建方法去请求,可以异步并发处理。

    • ThreadMode.BackGround:表示该方法在后台运行(也就是子线程),不能够并发处理,如果发布者在子线程,那么该方法就在子线程执行。如果发布者在主线程,那么该方法就会创建一个子线程,在子线程运行。

    相关文章

      网友评论

          本文标题:EventBus 3.0 使用笔记

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