EventBus是我们在项目开发时常用的进程通信组件,其功能与广播类似,发送通知后改变UI或者进行其他的逻辑操作。在接收消息是有四种线程模式:POSTING、 MAIN、 BACGROUND、 ASYNC。
1.POSTING:这个模式是EventBus默认的线程模式,跟发送消息是在同一个线程中,如果是在主线程发送的消息,接收也在主线程,如果是在子线程中发送的消息,那么接收也在同一个子线程中。
@Subscribe(threadMode = ThreadMode.POSTING)
public void onMessageReceive(EventBusBean<String> event) {
if (event != null) {
Log.i(TAG, event.getMessage());
}
}
2.MAIN:这个模式是无论发送消息是在主线程还是子线程,接收消息永远都在主线程当中。进行UI操作
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageReceive(EventBusBean<String> event) {
if (event != null) {
Log.i(TAG, event.getMessage());
}
}
3.BACGROUND:接收消息永远在子线程中,如果发送消息是在主线程中,则新开辟新的子线程来接收消息,如果发送消息是在子线程中,则接收消息是在同一子线程中。
@Subscribe(threadMode = ThreadMode.BACKGROUND)
public void onMessageReceive(EventBusBean<String> event) {
if (event != null) {
Log.i(TAG, event.getMessage());
}
}
4.ASYNC:接收消息永远在独立的子线程中,无论发送消息是在主线程还是子线程中都会新开辟新的子线程来接收消息。
@Subscribe(threadMode = ThreadMode.ASYNC)
public void onMessageReceive(EventBusBean<String> event) {
if (event != null) {
Log.i(TAG, event.getMessage());
}
}
总结:这四种线程模式可根据具体业务需求来选择使用,在项目当中,使用最多的是MAIN来更新UI操作。