RxBus的使用

前一階段,組內(nèi)做技術(shù)分享,我給大家分享了RxJava的使用。在分享的時候,這次分享也是我對RxJava一個快速學(xué)習(xí)和掌握的過程,分享的時候講到了RxBus,在此之前我還沒有用過RxBus,新項目嘗試用一下。用法和EventBus類似,優(yōu)點是少引入一個jar。
步驟如下:
1.先引入RxJava的jar包,這里只涉及RxJava.
compile 'io.reactivex:rxjava:1.1.9'
2.定義一個RxBus類。
public class RxBus { private static volatile RxBus mInstance; private final Subject<Object, Object> bus; private RxBus() { bus = new SerializedSubject<>(PublishSubject.create()); } //單例RxBus public static RxBus getInstance() { RxBus rxBus = mInstance; if (mInstance == null) { synchronized (RxBus.class) { rxBus = mInstance; if (mInstance == null) { rxBus = new RxBus(); mInstance = rxBus; } } } return rxBus; } // 發(fā)送一個新事件 public void send(Object o) { bus.onNext(o); } // 返回特定類型的被觀察者 public <T> Observable<T> toObservable(Class<T> eventType) { return bus.ofType(eventType); }}
3.定義一個事件對應(yīng)的Event
public class CalculateEvent { String result; //計算的結(jié)果 public CalculateEvent(String result) { this.result = result; } public String getResult() { return result; } public void setResult(String result) { this.result = result; } @Override public String toString() { return "CalculateEvent{" + "result='" + result + '\'' + '}'; }}
4.發(fā)送事件:
RxBus.getInstance().send(new CalculateEvent(""+ 3 * 2));
5.在接收事件的地方要做以下幾步:
5.1訂閱事件
private CompositeSubscription rxSubscriptions = new CompositeSubscription();
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //訂閱下載事件 subscribeDownloadEvent(); }
5.2處理事件
/** * RxBus subscribeDownloadEvent() */ private void subscribeDownloadEvent() { rxSubscriptions.add(RxBus.getInstance().toObservable(CalculateEvent.class) .map(new Func1<Object, CalculateEvent>() { @Override public CalculateEvent call(Object o) { return (CalculateEvent) o; } }) .subscribe(new Action1<CalculateEvent>() { @Override public void call(CalculateEvent calculateEvent) { Log.i(TAG, "MainActivity.call." + calculateEvent.toString()); } })); }
5.3取消訂閱,防止內(nèi)存泄漏
/* * 取消訂閱,防止內(nèi)存泄漏 */ private void unSubscribe() { Log.i(TAG,"MainActivity.unSubscribe."); if (!rxSubscriptions.isUnsubscribed()) { rxSubscriptions.unsubscribe(); } }
在OnDestory方法中去取消。
@Override protected void onDestroy() { super.onDestroy(); //取消訂閱 unSubscribe(); }
Demo已經(jīng)上傳到Github上了RxBusDemo

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評論 19 139
  • 前言我從去年開始使用 RxJava ,到現(xiàn)在一年多了。今年加入了 Flipboard 后,看到 Flipboard...
    占導(dǎo)zqq閱讀 9,299評論 6 151
  • 我從去年開始使用 RxJava ,到現(xiàn)在一年多了。今年加入了 Flipboard 后,看到 Flipboard 的...
    Jason_andy閱讀 5,740評論 7 62
  • 注:只包含標準包中的操作符,用于個人學(xué)習(xí)及備忘參考博客:http://blog.csdn.net/maplejaw...
    小白要超神閱讀 2,366評論 2 8
  • 2016年7月9號深夜,11點31分。 工作 負責(zé)了一個內(nèi)部的管理系統(tǒng)開發(fā),起初并不緊張的安排。用了一套前后端分離...
    瓊樹_閱讀 599評論 2 2

友情鏈接更多精彩內(nèi)容