EventBus3.0使用详解

2019-06-13  本文已影响0人  Cris_Ma

EventBus3.0

Gradle依赖:

implementation 'org.greenrobot:eventbus:3.0.0'

结构:

线程:

使用方法:

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();
上一篇下一篇

猜你喜欢

热点阅读