1. 程式人生 > >EventBus簡單應用和簡單分析(附demo)

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.

 

 

 

demo原始碼下載

 

如果想深入瞭解一些的,可以參考這個哥們的blog。

http://blog.csdn.net/lmj623565791/article/details/40920453

 

 

個人專案txtreader:已經發布google play,http://blog.csdn.net/pangzaifei/article/details/52756777

有需要的可以聯絡