1. 程式人生 > >EventBus四種執行緒交付模式

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));
}