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

  1. getDefault() 為EventBus內建的Factory method, 也可以建立自定義的EventBus
  2. 沒有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.訂閱事件

  1. 方法名稱一定為onEvent()
  2. 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!!"));
    };

    ...

}

其他

  1. onEvent() 可替換成 onEventMainThread(), onEventBackgroundThread(), onEventAsync()來指定要在哪個Thread執行
  2. Sticky event﹔事件發送完成之後不會馬上消失,任何註冊sticky event的class可以馬上收到最後一則sticky event
  3. 記得在proguard.cfg中加入
     -keepclassmembers class ** {
     public void onEvent*(**);
    }
    

results matching ""

    No results matching ""