EventBus3.0使用详解

EventBus3.0

Gradle依赖:

implementation 'org.greenrobot:eventbus:3.0.0'

结构:

  • Event:事件

  • Publisher:发送者,发送需要处理的消息

  • Subscriber:订阅者,定义事件处理方法,必须通过register方法来注册。

线程:

  • POSTING (默认):在发送事件的线程处理事件

  • MAIN:主线程处理

  • BACKGROUND:后台线程处理,如果主线程发送,则新建线程

  • ASYNC:始终在其他线程处理

使用方法:

1.定义Event:

public class EventMsg {

    public EventMsg(String msg){
        this.msg = msg;
    }
    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    String msg;
}
  1. 在需要处理事件类中注册EventBus,如果是Activity或者Fragment等有生命周期的组件,需要在销毁时解除注册,以防内存泄漏。
 @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        EventBus.getDefault().register(this);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        EventBus.getDefault().unregister(this);
    }
  1. 定义事件处理方法,在3.0以前方法名是固定的,3.0以后可以通过注解指定:

    @Subscribe(threadMode = ThreadMode.MAIN)
    public void handleMessage(EventMsg msg) {
        Toast.makeText(this,"Received message: " + msg.getMsg(), Toast.LENGTH_SHORT).show();
    }

  1. 发送事件:
  EventBus.getDefault().post(new EventMsg("Event Bus 3.0!!"));

注意:一个事件只能被处理一次。

  1. 粘性事件:
    @Subscribe(threadMode = ThreadMode.MAIN,sticky = true)
    public void handleMessage(EventMsg msg) {
        Toast.makeText(this,"Received message: " + msg.getMsg(), Toast.LENGTH_SHORT).show();
    }


    EventBus.getDefault().postSticky(new EventMsg("Event Bus 3.0!!"));

粘性事件:事件发出之后可以作为普通事件被没有 sticky = true 修饰的方法处理,但是处理完之后事件不会消失,后续新增的订阅者依然可以收到该事件,但是处理方法必须有 sticky = true 修饰。如果想要移除粘性事件,需要手动移除:

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

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,803评论 1 32
  • EventBus 是一款在 Android 开发中使用的发布/订阅事件总线框架,基于观察者模式,将事件的接收者和发...
    MonkeyLqj阅读 13,526评论 3 31
  • EventBus 是一个Android端优化的 publish/subscribe 消息总线,简化了应用程序各个组...
    王世军Steven阅读 5,830评论 4 21
  • EventBus这个开源框架出来已经很久了,深的很多开发者青睐,由greenrobot组织贡献(该组织还贡献了gr...
    Scus阅读 6,678评论 0 0
  • EventBus源码分析(一) EventBus官方介绍为一个为Android系统优化的事件订阅总线,它不仅可以很...
    蕉下孤客阅读 9,433评论 4 42