android -------- LiveDataBus的使用

LiveData是17年GoogleIO大會上提出來的一個新技術。相對於通訊總線類型的框架EventBus和RxBus來講,它更簡單,更簡潔、更解耦。android


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


LiveDataBus優勢github

LiveDataBus的實現及其簡單 框架

相對EventBus複雜的實現,LiveDataBus只須要一個類就能夠實現ide


LiveDataBus能夠減少APK包的大小post

LiveDataBus只依賴Android官方組件LiveData,自己實現只一個類。EventBus 57Kb、RxJava 2.2Mthis


LiveDataBus 依賴方支持更好spa

LiveDataBus只依賴Android官方組件LiveData,相比RxBus依賴的RxJava和RxAndroid,依賴方支持更好code


LiveDataBus具備生命週期感知server


LiveDataBus具備生命週期感知,在Android系統中使用調用者不須要調用反註冊,相比EventBus和RxBus使用更爲方便,而且沒有內存泄漏風險。


LiveEventBus的特色

生命週期感知,消息隨時訂閱,自動取消訂閱
支持Sticky粘性消息
支持AndroidX
支持跨進程通訊
支持跨APP通訊
支持設置LifecycleObserver(如Activity)接收消息的模式:

1.整個生命週期(從onCreate到onDestroy)均可以實時收到消息
2.激活狀態(Started)能夠實時收到消息,非激活狀態(Stoped)沒法實時收到消息,需等到Activity從新變成激活狀態,方可收到消息


在工程中引用
implementation 'com.jeremyliao:live-event-bus:1.4.2'

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

LiveEventBus.get()
        .config()
        .supportBroadcast(this)
        .lifecycleObserverAlwaysActive(true);

具備生命週期感知能力,LifecycleOwner銷燬時自動取消訂閱,不須要調用removeObserver

保證 with() 中的key值相同,(註冊/接收)和發起通訊

註冊:

LiveEventBus.get().with("LiveDataBusDemo1",String.class).observe(this, new Observer<String>() {
@Override
public void onChanged(@Nullable String s) {
Log.i("aaa",s);
}
});


發起通訊

LiveEventBus.get().with("LiveDataBusDemo1").post("LiveDataBus1");

 

以Forever模式訂閱和取消訂閱消息,Forever模式訂閱消息,須要手動調用removeObserver取消訂閱

註冊

private Observer<String> observer = new Observer<String>() {
@Override
public void onChanged(@Nullable String s) {
Log.i("aaa",s);
textView.setText("observeForever註冊的觀察者收到消息: " + s);
}
};

LiveEventBus.get()
.with("LiveDataBusDemo2", String.class)
.observeForever(observer);

 

發起通訊

LiveEventBus.get().with("LiveDataBusDemo2").post("LiveDataBus2");

 

手動取消訂閱消息

LiveEventBus.get()
.with("LiveDataBusDemo2", String.class)
.removeObserver(observer);

 

 

Sticky模式(能夠接收 前面/未註冊以前 發起通訊的信息)

支持在訂閱消息的時候設置Sticky模式,這樣訂閱者能夠接收到以前發送的消息,固然也支持後面發送的信息

以Sticky模式訂閱消息,具備生命週期感知能力,LifecycleOwner銷燬時自動取消訂閱,不須要調用removeObserver

 

註冊

LiveEventBus.get()
.with("LiveDataBusDemo3", String.class)
.observeSticky(this, new Observer<String>() {
@Override
public void onChanged(@Nullable String s) {
Log.i("aaa",s);
textView.setText("observeSticky註冊的觀察者收到消息: " + s);
}
});

 


發起通訊(你能夠在註冊以前和註冊以後分辨發起通知看效果)

LiveEventBus.get().with("LiveDataBusDemo3").post("LiveDataBus3");


observeStickyForever,Forever模式訂閱消息,須要手動調用removeObserver取消訂閱,和上面的同樣


註冊

private Observer<String> observer = new Observer<String>() {
@Override
public void onChanged(@Nullable String s) {
Log.i("aaa",s);
textView.setText("observeStickyForever註冊的觀察者收到消息: " + s);
}
};


LiveEventBus.get()
.with("LiveDataBusDemo4", String.class)
.observeStickyForever(observer);

 

 


發起通訊

LiveEventBus.get().with("LiveDataBusDemo4").post("LiveDataBus4");

 

手動取消訂閱消息

LiveEventBus.get()
.with("LiveDataBusDemo4", String.class)
.removeObserver(observer);

 

混淆規則

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

 

參考文檔:https://github.com/JeremyLiao/LiveEventBus

相關文章
相關標籤/搜索