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