RxJava中幾種不同的subject解釋

在rxjava中,subject是即可作為觀察者形帮,也可以作為被觀察者 。顧名思義

  • subject作為被觀察者(observable)
    即可作為observable向其他observable發(fā)送時間
  • subject作為觀察者(observer)
    即可作為observer接收其他observable發(fā)送的事件
一、observable的subject

看官方網(wǎng)文檔铡原,可以發(fā)現(xiàn)subject作為observable的時候主要有四個子類沈跨,分別是PublishSubject由捎、BehaviorSubject、ReplaySubject饿凛、AsyncSubject狞玛。

  • PublishSubject
    最常見的subject软驰,當觀察者訂閱該subject,它會按照順序發(fā)送事件給訂閱的觀察者心肪。不會因為事件改變而改變順序


    圖片.png
  • BehaviorSubject
    該類有創(chuàng)建時需要一個默認參數(shù)。并且在發(fā)送的時候會先發(fā)送離訂閱最近的一個值,如果沒有值的話就是用這個默認值歪赢,參考一下代碼(參考):


    圖片.png
// 訂閱之前酷勺,最近一個值為空,這里將發(fā)送默認值“default”給觀察者
  BehaviorSubject<Object> subject = BehaviorSubject.create("default");
  subject.subscribe(observer);
  subject.onNext("one");
  subject.onNext("two");
  subject.onNext("three");

  // 訂閱之前固该,最近一個值為“zero”锅减,會先發(fā)送zero.因此觀察者會接收到“one”、“two”伐坏、“three”
  BehaviorSubject<Object> subject = BehaviorSubject.create("default");
  subject.onNext("zero");
  subject.onNext("one");
  subject.subscribe(observer);
  subject.onNext("two");
  subject.onNext("three");

  // 觀察者只能接收到onCompleted
  BehaviorSubject<Object> subject = BehaviorSubject.create("default");
  subject.onNext("zero");
  subject.onNext("one");
  subject.onCompleted();
  subject.subscribe(observer);

  // 觀察者只能接收到onError
  BehaviorSubject<Object> subject = BehaviorSubject.create("default");
  subject.onNext("zero");
  subject.onNext("one");
  subject.onError(new RuntimeException("error"));
  subject.subscribe(observer);
  • ReplaySubject
    該subject既有緩存事件怔匣,也就是當被一個觀察者所訂閱的時候,事件不會直接被消化桦沉。下個觀察者訂閱的時候可以再次接收到事件每瞒。


    圖片.png
  ReplaySubject<Object> subject = ReplaySubject.create();
  subject.onNext("one");
  subject.onNext("two");
  subject.onNext("three");
  subject.onCompleted();

  // 兩個觀察者都會接收到事件
  subject.subscribe(observer1);
  subject.subscribe(observer2);
  • AsyncSubject
    該subject只有在被觀察者(subject)結(jié)束的時候(即執(zhí)行了onCompleted)后觀察者才能夠接收到事件,并且也只有能接收到最后一個事件永部。


    圖片.png
// 觀察者不會接收到任何數(shù)據(jù)独泞,因為subject沒有結(jié)束(onCompleted)
  AsyncSubject<Object> subject = AsyncSubject.create();
  subject.subscribe(observer);
  subject.onNext("one");
  subject.onNext("two");
  subject.onNext("three");

  // 觀察者只能接收到最后一件事件,即three事件
  AsyncSubject<Object> subject = AsyncSubject.create();
  subject.subscribe(observer);
  subject.onNext("one");
  subject.onNext("two");
  subject.onNext("three");
  subject.onCompleted();
二苔埋、observer的subject

這個日常應該會遇到的比較少懦砂,原理是subject訂閱被觀察者的時候,當被觀察者發(fā)送事件到subject后组橄,會發(fā)送到subject中注冊的observer中荞膘。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市玉工,隨后出現(xiàn)的幾起案子羽资,更是在濱河造成了極大的恐慌,老刑警劉巖遵班,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件屠升,死亡現(xiàn)場離奇詭異,居然都是意外死亡狭郑,警方通過查閱死者的電腦和手機腹暖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來翰萨,“玉大人脏答,你說我怎么就攤上這事。” “怎么了殖告?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵阿蝶,是天一觀的道長。 經(jīng)常有香客問我黄绩,道長羡洁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任宝与,我火速辦了婚禮焚廊,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘习劫。我一直安慰自己咆瘟,他們只是感情好,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布诽里。 她就那樣靜靜地躺著袒餐,像睡著了一般。 火紅的嫁衣襯著肌膚如雪谤狡。 梳的紋絲不亂的頭發(fā)上灸眼,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天,我揣著相機與錄音墓懂,去河邊找鬼焰宣。 笑死,一個胖子當著我的面吹牛捕仔,可吹牛的內(nèi)容都是我干的匕积。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼榜跌,長吁一口氣:“原來是場噩夢啊……” “哼闪唆!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起钓葫,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤悄蕾,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后础浮,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體帆调,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年豆同,在試婚紗的時候發(fā)現(xiàn)自己被綠了贷帮。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡诱告,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情精居,我是刑警寧澤锄禽,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站靴姿,受9級特大地震影響沃但,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜佛吓,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一宵晚、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧维雇,春花似錦淤刃、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至津滞,卻和暖如春铝侵,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背触徐。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工咪鲜, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人撞鹉。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓疟丙,卻偏偏與公主長得像,于是被迫代替她去往敵國和親孔祸。 傳聞我的和親對象是個殘疾皇子隆敢,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

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