eventbus
參考文件
ref | link |
---|---|
github | https://github.com/greenrobot/EventBus |
簡介
Eventbus是一個事件管理平台, 可以將它想像成Android BroadCast & BroadcastReceiver的輕量版, 以事件驅動的方式來簡化事件傳遞邏輯,一般Android 開發是以callback或handler來達到類似效果。 如果物件之間的訊息傳遞經過太多其他物件;或是一則訊息要傳給多個物件, 導入Eventbus會是一個不錯的選擇
如何使用
1.gradle
compile 'de.greenrobot:eventbus:2.4.0'
2.定義事件
public class WhateverEvent { /* 事件可帶任意資料String, int, Object... */
private String message
public WhateverEvent(String message){
this.message = message;
}
public String getMessage(){
return message;
}
3.註冊, 反註冊EventBus
- getDefault() 為EventBus內建的Factory method, 也可以建立自定義的EventBus
- 沒有unregister(this) 會造成memory leak
public class MainActivity extends AppCompatActivity {
...
@Override
protected void onResume() {
super.onResume();
EventBus.getDefault().register(this);
}
@Override
protected void onPause() {
super.onPause();
EventBus.getDefault().unregister(this);
}
...
}
4.訂閱事件
- 方法名稱一定為onEvent()
- onEvent() 的paremeter為訂閱的事件
public class MainActivity extends AppCompatActivity {
...
public void onEvent(WhateverEvent event) {
/* 處理事件 */
Log.i("TAG", event.getMessage());
};
...
}
5. 傳送事件
public class WhatEverObject {
...
private void someMethod() {
/* 發送事件 */
EventBus.getDefault().post(new WhateverEvent("Hello world!!"));
};
...
}
其他
- onEvent() 可替換成 onEventMainThread(), onEventBackgroundThread(), onEventAsync()來指定要在哪個Thread執行
- Sticky event﹔事件發送完成之後不會馬上消失,任何註冊sticky event的class可以馬上收到最後一則sticky event
- 記得在proguard.cfg中加入
-keepclassmembers class ** { public void onEvent*(**); }