EventBus的四种线程模式

1、四种模式分别是:POSTING、MAIN、BACKGROUND、ASYNC。如果是想更新UI就使用MAIN模式,如果要进行耗时操作最好是使用ASYNC,因为这个模式能永远保证在不一样的线程中进行操作,而且都是子线程。

(1)POSTING:这种模式就是eventBus默认的模式,我们在使用的时候不需要再订阅者的方法的注解后面加任何东西(选择模式),但是这种只能在同一个线程中接收,也就是说,如果是在主线程中发布消息就只能在主线程中接收消息,如果是在子线程中,那么也只能在相同的子线程中去接收消息。如果非要声明POSTING的话,写法如下:

@Subscribe(threadMode = ThreadMode.POSTING)
    public void showMsgFromSecondActivity(MessagePojo msg){
        Log.i("test", ((String) msg.obj));
    }
(2)MAIN:这种模式保证了订阅者指定的那个接收方法肯定要主线程中执行,可以放心的在里面执行更新UI操作。无论发布者是在主线程中还是在那一条子线程中发布消息,这边接收的都在主线程中。写法如下

@Subscribe(threadMode = ThreadMode.MAIN)
    public void showMsgFromSecondActivity(MessagePojo msg){
        Log.i("test", ((String) msg.obj));
    }

(3)BACKGROUND:这种模式无论发布者是在主线程或者是那一条子线程中发布消息,接收的肯定是在子线程中,并且是这样理解:如果是在主线程中发布消息,那么就会随机开辟一条子线程来接收消息。如果是在子线程中发布消息,那么就会在相同的子线程来接收消息。写法如下:

@Subscribe(threadMode = ThreadMode.BACKGROUDN)
    public void showMsgFromSecondActivity(MessagePojo msg){
        Log.i("test", ((String) msg.obj));
    }

(4)ASYNC:这种模式是无论你在那个线程中发布消息都会在不同的线程中接受消息。如果你在主线程中发布消息,就会随机的开辟一条子线程来接收消息;如果是在子线程中发布消息,就会开辟一条不同的子线程来接收消息。

写法如下:

@Subscribe(threadMode = ThreadMode.ASYNC)
    public void showMsgFromSecondActivity(MessagePojo msg){
        Log.i("test", ((String) msg.obj));
    }

你可能感兴趣的:(EventBus的四种线程模式)