RxJava:RxBus事件總線

Photo by Peter Hershey on Unsplash

學(xué)習(xí)于:http://www.reibang.com/p/ca090f6e2fe2
http://reactivex.io/documentation/subject.html

基于RxJava2,通過觀察者模式實(shí)現(xiàn)頁(yè)面之間的數(shù)據(jù)傳遞器瘪;

public class RxBus {

    private static volatile RxBus mInstance;
    private final Subject<Object> bus;
    public RxBus() {
        bus = PublishSubject.create().toSerialized();

    }
    // 單例RxBus
    public static RxBus getDefault() {
        if (mInstance == null) {
            synchronized (RxBus.class) {
                if (mInstance == null) {
                    mInstance = new RxBus();
                }
            }
        }
        return mInstance;
    }
    // 發(fā)送事件
    public void post(Object o) {
        bus.onNext(o);
    }
    public <T> Observable<T> toObservable(Class<T> eventType) {
        return bus.ofType(eventType);
    }
}

Subject:既作為Observer又作為Observable铸本,并且提供了4種Subject
此處我們僅僅是簡(jiǎn)單的實(shí)現(xiàn)RxBus,所以使用PublishSubject
PublishSubject發(fā)送訂閱之后的全部數(shù)據(jù);

相同的是如果源Observable以錯(cuò)誤終止不铆,Subject則不會(huì)向隨后的觀察者發(fā)出任何項(xiàng)目,但會(huì)將簡(jiǎn)單地傳遞源Observable中的錯(cuò)誤通知裹唆。

Subject是非線程安全的,為了在并發(fā)情況下只一個(gè)線程調(diào)用onNext()等方法只洒,所以通過toSerialized()方法將Subject對(duì)象轉(zhuǎn)換為SerializedSubject對(duì)象许帐;

發(fā)送事件

    public void btn_2(View view) {
        RxBus.getDefault().post(new RxBusPostBean("whstywh", "18"));
    }

事件類

public class RxBusPostBean {
    private String name;
    private String age;

    public RxBusPostBean(String name, String age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }
    
    public String getAge() {
        return age;
    }
}

接受事件

    private void getDataByRxBus() {
        mDisposable = RxBus.getDefault()
                .toObservable(RxBusPostBean.class)
                .subscribe(new Consumer<RxBusPostBean>() {
                    @Override
                    public void accept(RxBusPostBean rxBusPostBean) throws Exception {
                        mTextView1.setText(rxBusPostBean.getName());
                        mTextView2.setText(rxBusPostBean.getAge());
                    }
                }, new Consumer<Throwable>() {
                    @Override
                    public void accept(Throwable throwable) throws Exception {
                        Log.d("flag", "throwable:" + throwable.getMessage());
                    }
                });
    }

在生命周期結(jié)束的地方取消訂閱事件,防止RxJava可能會(huì)引起的內(nèi)存泄漏問題

    @Override
    public void onDestroy() {
        super.onDestroy();
        if (!mDisposable.isDisposed()) {
            mDisposable.dispose();
        }
    }

對(duì)于RxJava的學(xué)習(xí)才剛剛開始毕谴!
RxJava:RxBus事件總線
RxJava:RxBinding
RxJava:Rxlifecycle

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末成畦,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子涝开,更是在濱河造成了極大的恐慌循帐,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,542評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件舀武,死亡現(xiàn)場(chǎng)離奇詭異拄养,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)银舱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門瘪匿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人寻馏,你說我怎么就攤上這事棋弥。” “怎么了诚欠?”我有些...
    開封第一講書人閱讀 158,021評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵顽染,是天一觀的道長(zhǎng)漾岳。 經(jīng)常有香客問我,道長(zhǎng)粉寞,這世上最難降的妖魔是什么尼荆? 我笑而不...
    開封第一講書人閱讀 56,682評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮仁锯,結(jié)果婚禮上耀找,老公的妹妹穿的比我還像新娘。我一直安慰自己业崖,他們只是感情好野芒,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,792評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著双炕,像睡著了一般狞悲。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上妇斤,一...
    開封第一講書人閱讀 49,985評(píng)論 1 291
  • 那天摇锋,我揣著相機(jī)與錄音,去河邊找鬼站超。 笑死荸恕,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的死相。 我是一名探鬼主播融求,決...
    沈念sama閱讀 39,107評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼算撮!你這毒婦竟也來了生宛?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,845評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤肮柜,失蹤者是張志新(化名)和其女友劉穎陷舅,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體审洞,經(jīng)...
    沈念sama閱讀 44,299評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡莱睁,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,612評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了芒澜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缩赛。...
    茶點(diǎn)故事閱讀 38,747評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖撰糠,靈堂內(nèi)的尸體忽然破棺而出酥馍,到底是詐尸還是另有隱情,我是刑警寧澤阅酪,帶...
    沈念sama閱讀 34,441評(píng)論 4 333
  • 正文 年R本政府宣布旨袒,位于F島的核電站汁针,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏砚尽。R本人自食惡果不足惜施无,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,072評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望必孤。 院中可真熱鬧猾骡,春花似錦、人聲如沸敷搪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)赡勘。三九已至嫂便,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間闸与,已是汗流浹背毙替。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評(píng)論 1 267
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留践樱,地道東北人厂画。 一個(gè)月前我還...
    沈念sama閱讀 46,545評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像拷邢,于是被迫代替她去往敵國(guó)和親木羹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,658評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容

  • 原文地址:http://gank.io/post/560e15be2dca930e00da1083 前言 我從去年...
    AFinalStone閱讀 2,189評(píng)論 5 23
  • http://blog.csdn.net/yyh352091626/article/details/5330472...
    奈何心善閱讀 3,550評(píng)論 0 0
  • 我從去年開始使用 RxJava 解孙,到現(xiàn)在一年多了。今年加入了 Flipboard 后抛人,看到 Flipboard 的...
    Jason_andy閱讀 5,462評(píng)論 7 62
  • 作者寄語 很久之前就想寫一個(gè)專題弛姜,專寫Android開發(fā)框架,專題的名字叫 XXX 從入門到放棄 妖枚,沉淀了這么久廷臼,...
    戴定康閱讀 7,619評(píng)論 13 85
  • 遠(yuǎn)離塵囂 懷揣一疊詩(shī)稿,走吧 在靜謐的山里 讀給身旁的石頭聽 餓了到叢林間覓食 采摘鮮美的野果 喝清澈的溪流 和自...
    陳清偉閱讀 256評(píng)論 0 2