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;
}
- 在需要处理事件类中注册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);
    }
- 定义事件处理方法,在3.0以前方法名是固定的,3.0以后可以通过注解指定:
    @Subscribe(threadMode = ThreadMode.MAIN)
    public void handleMessage(EventMsg msg) {
        Toast.makeText(this,"Received message: " + msg.getMsg(), Toast.LENGTH_SHORT).show();
    }
- 发送事件:
  EventBus.getDefault().post(new EventMsg("Event Bus 3.0!!"));
注意:一个事件只能被处理一次。
- 粘性事件:
    @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();