RxJava 中的 Subject

PublishSubject

Publish是Subject的一個基礎子類拇颅。發(fā)送訂閱后的數(shù)據(jù)流。

PublishSubject<Integer> publishSubject = PublishSubject.create();

BehaviorSubject

BehaviorSubject會首先向他的訂閱者發(fā)送截至訂閱前最新的一個數(shù)據(jù)對象(或初始值),然后正常發(fā)送訂閱后的數(shù)據(jù)流再登。

BehaviorSubject<Integer> behaviorSubject = BehaviorSubject.create(0);

我們創(chuàng)建了一個能發(fā)射整形(Integer)的BehaviorSubject。由于每當Observes訂閱它時就會發(fā)射最新的數(shù)據(jù),所以它需要一個初始值字旭。

ReplaySubject

ReplaySubject會緩存它所訂閱的所有數(shù)據(jù),向任意一個訂閱它的觀察者重發(fā):

ReplaySubject<Integer> replaySubject = ReplaySubject.create();

AsyncSubject

當Observable完成時AsyncSubject只會發(fā)布最后一個數(shù)據(jù)給已經(jīng)訂閱的每一個觀察者。

AsyncSubject<Integer> asyncSubject = AsyncSubject.create();

測試


    @Test
    public void observerTest() {
        PublishSubject<Integer> publishSubject = PublishSubject.create();
        BehaviorSubject<Integer> behaviorSubject = BehaviorSubject.create(0);
        ReplaySubject<Integer> replaySubject = ReplaySubject.create();
        AsyncSubject<Integer> asyncSubject = AsyncSubject.create();

        List<Subject> subjects = new ArrayList<>();
        subjects.add(publishSubject);
        subjects.add(behaviorSubject);
        subjects.add(replaySubject);
        subjects.add(asyncSubject);

        for (Subject subject :
                subjects) {
            System.out.println("--------------------------------\n" + subject.getClass().getSimpleName() + " start");
            subject.onNext(-3);
            subject.onNext(-2);
            subject.onNext(-1);
            subject.subscribe(new Subscriber<Integer>() {
                @Override
                public void onCompleted() {
                    System.out.println("onCompleted");
                }

                @Override
                public void onError(Throwable e) {
                    System.out.println("onError(");
                }

                @Override
                public void onNext(Integer integer) {
                    System.out.println(integer);
                }
            });

            subject.onNext(1);
            subject.onNext(2);
            subject.onNext(3);
            subject.onCompleted();

            System.out.println(subject.getClass().getSimpleName() + " end\n================================\n");
        }
    }
--------------------------------
PublishSubject start
1
2
3
onCompleted
PublishSubject end
================================

--------------------------------
BehaviorSubject start
-1  # 如果前面沒有發(fā)送數(shù)據(jù)崖叫, 此處會顯示 0
1
2
3
onCompleted
BehaviorSubject end
================================

--------------------------------
ReplaySubject start
-3
-2
-1
1
2
3
onCompleted
ReplaySubject end
================================

--------------------------------
AsyncSubject start
3
onCompleted
AsyncSubject end
================================
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末遗淳,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子心傀,更是在濱河造成了極大的恐慌屈暗,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,919評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異养叛,居然都是意外死亡种呐,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評論 3 392
  • 文/潘曉璐 我一進店門弃甥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來爽室,“玉大人,你說我怎么就攤上這事淆攻±眨” “怎么了?”我有些...
    開封第一講書人閱讀 163,316評論 0 353
  • 文/不壞的土叔 我叫張陵瓶珊,是天一觀的道長啸箫。 經(jīng)常有香客問我,道長艰毒,這世上最難降的妖魔是什么筐高? 我笑而不...
    開封第一講書人閱讀 58,294評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮丑瞧,結果婚禮上柑土,老公的妹妹穿的比我還像新娘。我一直安慰自己绊汹,他們只是感情好稽屏,可當我...
    茶點故事閱讀 67,318評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著西乖,像睡著了一般狐榔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上获雕,一...
    開封第一講書人閱讀 51,245評論 1 299
  • 那天薄腻,我揣著相機與錄音,去河邊找鬼届案。 笑死庵楷,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的楣颠。 我是一名探鬼主播尽纽,決...
    沈念sama閱讀 40,120評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼童漩!你這毒婦竟也來了弄贿?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,964評論 0 275
  • 序言:老撾萬榮一對情侶失蹤矫膨,失蹤者是張志新(化名)和其女友劉穎差凹,沒想到半個月后期奔,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,376評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡危尿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,592評論 2 333
  • 正文 我和宋清朗相戀三年能庆,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片脚线。...
    茶點故事閱讀 39,764評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖弥搞,靈堂內(nèi)的尸體忽然破棺而出邮绿,到底是詐尸還是另有隱情,我是刑警寧澤攀例,帶...
    沈念sama閱讀 35,460評論 5 344
  • 正文 年R本政府宣布船逮,位于F島的核電站,受9級特大地震影響粤铭,放射性物質(zhì)發(fā)生泄漏挖胃。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,070評論 3 327
  • 文/蒙蒙 一梆惯、第九天 我趴在偏房一處隱蔽的房頂上張望酱鸭。 院中可真熱鬧,春花似錦垛吗、人聲如沸凹髓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蔚舀。三九已至,卻和暖如春锨络,著一層夾襖步出監(jiān)牢的瞬間赌躺,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評論 1 269
  • 我被黑心中介騙來泰國打工羡儿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留礼患,地道東北人。 一個月前我還...
    沈念sama閱讀 47,819評論 2 370
  • 正文 我出身青樓失受,卻偏偏與公主長得像讶泰,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子拂到,可洞房花燭夜當晚...
    茶點故事閱讀 44,665評論 2 354