EventBus笔记

EventBus


EventBus的使用方法的一些需要注意的方面

1.配置build.gradle,引入依赖:

2.定义消息类:

public class Message {
    ...
}

3.定义接收事件:

  • 在fragment中声明接收事件:
    在onCreateView()方法中进行事件的订阅
if (!EventBus.getDefault().isRegister) {
    EventBus.getDefault().register(this,view);
}

在onDestroy()方法中进行解绑操作:

if (EventBus.getDefault().isRegister(this)) {
    EventBus.getDefault().unregister(this);
}

在接收函数的上方指定该函数工作的模式及所接收事件是否为粘性事件:

@Subscriber(threadMode = 4种线程模式之一, sticky = true|false)  
public void onMessageEvent(Message message) { //函数名可以自由定义
    ...
}

4.发出消息:

  • 非粘性事件:
EventBus.getDefault().post(Message);
  • 粘性事件(使用粘性事件后,在发送事件之后再订阅该事件也能收到该事件):
EventBus.getDefault().postSticky(Message);

5.需要注意的一些问题:

  • 4种线程模式的介绍:
    A.POSTING:EventBus默认的线程模式,跟发送消息是在同一线程中;如果是在主线程发送的消息,接收也在主线程;如果是在子线程中发送的消息,那么接收消息也在同一子线程中;
    B.MAIN:无论发送消息是在主线程还是子线程,接收消息永远都在主线程当中,可以进行更新UI操作;
    C.BACKGROUND:接受消息永远在子线程中,如果发送消息是在主线程中,则开辟新的子线程来接收消息;如果发送消息是在子线程中,则接收消息是在同一子线程中;
    D.ASYNC:接收消息永远在独立的子线程中,无论发送消息是在子线程还是主线程中,都会开辟一个新的子线程来接收消息。

  • 设置粘性事件后,接收事件多次执行
    解决方案:在接收事件中添加以下代码:

EventBus.getDefault().removeAllStickyEvent();
posted @ 2019-02-25 17:14  Ricardoldc  阅读(211)  评论(0编辑  收藏  举报