LiveEventBus的使用

一、前言:

LiveEventBus是一款Android消息總線,基於LiveData,具有生命週期感知能力,支持Sticky,支持AndroidX,支持跨進程,支持跨APP。

爲什麼要用LiveEventBus?

1、生命週期感知
  • 消息隨時訂閱,自動取消訂閱
  • 告別消息總線造成的內存泄漏
  • 告別生命週期造成的崩潰
2、範圍全覆蓋的消息總線解決方案
  • 進程內消息發送
  • App內,跨進程消息發送
  • App之間的消息發送
3、 更多特性支持
  • 免配置直接使用,懶人最愛
  • 支持Sticky粘性消息
  • 支持AndroidX
  • 支持延遲發送
  • 觀察者的多種接收模式(全生命週期/激活狀態可接受消息)

4、 常用消息總線對比
消息總線 延遲發送 有序接收消息 Sticky 生命週期感知 跨進程/APP 線程分發
EventBus
RxBus
LiveEventBus

想了解更多?請點擊:全面瞭解Android消息總線

demo下載:https://github.com/JeremyLiao/LiveEventBus.git

二、使用:

1、依賴:

Via Gradle:

implementation 'com.jeremyliao:live-event-bus:1.7.2'

For AndroidX:

implementation 'com.jeremyliao:live-event-bus-x:1.7.2'

2、訂閱消息

  • 以生命週期感知模式訂閱消息
LiveEventBus
    .get("some_key", String.class)
    .observe(this, new Observer<String>() {
        @Override
        public void onChanged(@Nullable String s) {
        }
    });

  • 以Forever模式訂閱消息
LiveEventBus
    .get("some_key", String.class)
    .observeForever(observer);

3、發送消息

  • 不定義消息直接發送
LiveEventBus
    .get("some_key")
    .post(some_value);

  • 先定義消息,再發送消息
//定義類型
public class DemoEvent implements LiveEvent {
    public final String content;

    public DemoEvent(String content) {
        this.content = content;
    }
}
//發送消息
LiveEventBus
        .get(DemoEvent.class)
        .post(new DemoEvent("Hello world"));

4、在Application.onCreate方法中配置:

  LiveEventBus
             .config()
             .autoClear(true)
             .lifecycleObserverAlwaysActive(true);

  • lifecycleObserverAlwaysActive
    配置LifecycleObserver(如Activity)接收消息的模式(默認值true):
    true:整個生命週期(從onCreate到onDestroy)都可以實時收到消息
    false:激活狀態(Started)可以實時收到消息,非激活狀態(Stoped)無法實時收到消息,需等到Activity重新變成激活狀態,方可收到消息

  • autoClear
    配置在沒有Observer關聯的時候是否自動清除LiveEvent以釋放內存(默認值false)

  • setJsonConverter
    配置JsonConverter(默認使用gson)

  • setLogger
    配置Logger(默認使用DefaultLogger)

  • enableLogger
    配置是否打印日誌(默認打印日誌)

  • setContext
    如果廣播模式有問題,請手動傳入Context,需要在application onCreate中配置

三、詳細使用文檔

1、 獲取Observable

  • 通過name獲取Observable
Observable<T> get(@NonNull String key, @NonNull Class<T> type)

Observable<Object> get(@NonNull String key)

  • 通過event type獲取Observable
<T extends LiveEvent> Observable<T> get(@NonNull Class<T> eventType)

2、 消息發送

進程內發送消息
void post(T value)

App內發送消息,跨進程使用
void postAcrossProcess(T value)

App之間發送消息
void postAcrossApp(T value)

進程內發送消息,延遲發送
void postDelay(T value, long delay)

進程內發送消息,延遲發送,帶生命週期
void postDelay(LifecycleOwner sender, T value, long delay)

進程內發送消息,有序發送
void postOrderly(T value)

以廣播的形式發送一個消息
  • 需要跨進程、跨APP發送消息的時候調用該方法
  • 建議儘量使用postAcrossProcess、postAcrossApp
void broadcast(T value, boolean foreground, boolean onlyInApp)

3、 消息訂閱

以生命週期感知模式訂閱消息
  • 具有生命週期感知能力,LifecycleOwner銷燬時自動取消訂閱,不需要調用removeObserver
void observe(@NonNull LifecycleOwner owner, @NonNull Observer<T> observer)

以Forever模式訂閱和取消訂閱消息
  • Forever模式訂閱消息,需要調用removeObserver取消訂閱
void observeForever(@NonNull Observer<T> observer)

取消訂閱消息
void removeObserver(@NonNull Observer<T> observer)

Sticky模式訂閱消息
  • Sticky模式
  • 支持在訂閱消息的時候設置Sticky模式,這樣訂閱者可以接收到之前發送的消息。
  • 以Sticky模式訂閱消息,具有生命週期感知能力,LifecycleOwner銷燬時自動取消訂閱,不需要調用removeObserver
void observeSticky(@NonNull LifecycleOwner owner, @NonNull Observer<T> observer)

Sticky模式Forever訂閱消息
  • Forever模式訂閱消息,需要調用removeObserver取消訂閱,Sticky模式
void observeStickyForever(@NonNull Observer<T> observer)

4、 跨進程消息

支持對基本數據類型消息的跨進程發送
  1. int
  2. float
  3. long
  4. boolean
  5. double
  6. String
支持Serializable和Parcelable類型消息的跨進程發送
  • 提供SerializableProcessor
  • 提供ParcelableProcessor
支持Bean類型消息的跨進程發送
  • 提供GsonProcessor以Gson方式提供支持
  • 需要用註解@IpcConfig指定GsonProcessor:
@IpcConfig(processor = GsonProcessor.class)

支持自定義擴展
  • 實現自定義Processor,實現Processor接口
  • 用註解@IpcConfig指定自定義Processor

5、 配置

在Application.onCreate方法中配置:

LiveEventBus
        .config()
        ...

  • lifecycleObserverAlwaysActive 配置LifecycleObserver(如Activity)接收消息的模式(默認值true)

  • autoClear 配置在沒有Observer關聯的時候是否自動清除LiveEvent以釋放內存(默認值false)

更多配置信息,請點擊:LiveEventBus的配置

6、混淆規則

-dontwarn com.jeremyliao.liveeventbus.**
-keep class com.jeremyliao.liveeventbus.** { *; }
-keep class android.arch.lifecycle.** { *; }
-keep class android.arch.core.** { *; }

for androidx:

-dontwarn com.jeremyliao.liveeventbus.**
-keep class com.jeremyliao.liveeventbus.** { *; }
-keep class androidx.lifecycle.** { *; }
-keep class androidx.arch.core.** { *; }


參考:LiveEventBus

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章