EventBus簡單應用和簡單分析(附demo)
貌似最近EventBus挺火,自己找了找資料,然後看了看,寫了個簡單demo。供大家參考。
EventBus專案中沒有用到,我也是自己看一些資料,所以東西相對簡單,見諒。一些高階功能,也只能靠大家自行摸索了。
一:首先說一下我覺得EventBus幾個重要的點吧。
1.這個類似廣播需要你將EventBus register和unregister
一般在onCreate()中註冊,在onDestory()中註冊。為什麼要註冊?
當你register()之後,他會遍歷你的.class檔案,找到幾個重要的onEvent開頭的方法
(onEventMainThread()、onEventPostThread()、onEventBackgroundThrad()、onEventAsync())後面會介紹這幾這onEvent開頭的方法。
2.註冊完之後,比如在子執行緒中執行一個耗時的操作,當完成之後,需要更新介面。這時不需要handler可以這樣.
2.1呼叫EventBus.getDefault.post(引數);
這個引數,是你需要傳遞的資料,比如是一個list.
2.2在你的類中新增方法
public void onEventMainThread(引數){
//比如listView更新
//listview.setadapter(引數);
}
這裡的引數,就是你之前EventBus.getDefault.post(引數)中的引數,如果型別不同,那麼就會找不到onEventMainThread(引數),從而無法更新。
為什麼呢?
之前說過,當你register()註冊的時候,他會遍歷你的類然後找出onEvent開頭的方法,他會把這些方法放到一個map集合中,當你呼叫EventBus.getDefault.post(引數)它就會去map中找制定的onEvent開頭的方法.
3.當你使用完,記得呼叫EventBus.getDefault..unregister(context);來登出
二:說一下這幾個onEvent開頭的方法。
這些方法並不是重寫的,而是需要你寫出來的方法.所以一定要仔細。
onEventMainThread():UI執行緒,不多說,更新介面什麼的就在這裡面。
onEventPostThread():誰呼叫的EventBus.getDefault().post(引數)這個時候的執行緒,那麼onEventPostThread()就代表那個執行緒,同ui對比,就一目瞭然了。
onEventBackgroundThrad():這裡面有執行緒池,可以排隊。
onEventAsync():這個沒有排隊。
文章出處:https://blog.csdn.net/pangzaifei/article/details/70213731
附上EventBus的機制(英文)
我寫個大白話解釋吧,我(publisher)想讓eventBus工作,就呼叫Event.getDefault().post()
eventBus接收到你的資訊,他會找對應的onEvent()就是(Subscriber).
EventBus...
- simplifies the communication between components
- decouples event senders and receivers
- performs well with Activities, Fragments, and background threads
- avoids complex and error-prone dependencies and life cycle issues
- makes your code simpler
- is fast
- is tiny (<50k jar)
- is proven in practice by apps with 100,000,000+ installs
-
has advanced features like delivery threads, subscriber priorities, etc.
如果想深入瞭解一些的,可以參考這個哥們的blog。
http://blog.csdn.net/lmj623565791/article/details/40920453
個人專案txtreader:已經發布google play,http://blog.csdn.net/pangzaifei/article/details/52756777
有需要的可以聯絡