一:EventBus是個什么東西
下載地址:https://github.com/greenrobot/EventBus
EventBus就是publish/subscribe消息總線,主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,線程之間傳遞消息。
它的三要素:
Event:事件??梢允侨魏蔚膶ο?。
Subscriber:事件訂閱者,接收特定的事件。方法以onEvent**開頭,一共有四個方法onEvent,onEventMainThread,onEventBackgroundThread,onEventAsync。它們之間的區別在于在不同的線程。等會會有一一舉例。
Publisher:事件發布者,用于通知Subscriber有事件發生,可以在任何的地方發布事件。使用也是簡單,只要調用post(Object)方法就可以了。
二:如何使用
定義一個事件對象
創建MainActivity并注冊訂閱者
在MainActivity中實現onEvent**方法
點擊發送UI線程中的事件,onEvent執行就是在UI線程中,onEventMainThread也運行在UI線程中,onEventBackgroundThread是另啟動了一個線程,onEventAsync也是另啟動了一個線程。
點擊發送工作線程中的事件,onEvent執行在工作線程中,onEventMainThread運行在UI線程中,onEventBackgroundThread運行在當前的工作線程中,onEventAsync啟動了另一個線程。
所以根據上面的結果可以很好的理解各個onEvent的區別:
onEvent:事件在哪個線程發布出來的,就會在這個線程中運行,也就是說發布事件和接收事件線程在同一個線程。
onEventMainThread:事件無論是從哪個線程發布出來的,都會在UI線程中執行。
onEvnetBackground:事件是在UI線程中發布出來的,那么就會在子線程中運行,如果事件本來就是子線程中發布出來的,那么就直接在該子線程中執行。
onEventAsync:使無論事件在哪個線程發布,都會創建新的子線程。