RxJava补充笔记

Observalbe的订阅与事件发送过程的关联

Cold Observalbes:多次订阅都重用同一个Observalbe对象,每次订阅都自动重演一次事件发送流程(并行启动多个独立事件发送流)
defer(Func0):每次订阅重建一个新Observalbe对象
cache:每次订阅都发送之前缓存的旧事件,不重演事件发送流程

Connectable Observables (Hot):多次订阅都重用同一个Observalbe对象,通过 connect 函数手动启动事件发送,每次订阅仅能接收订阅后发送的事件(仅启动单个事件发送流,不重演)
replay:多次订阅都重用同一个Observalbe对象,每次订阅都重放一次事件发送流程(缓存旧事件),允许通过附加参数指定缓存区大小(或有效时间窗口长度),相当于Cold Observalbes中的cache操作

Observable的Cold-Hot转化

publish:将Cold Observalbe转化为Connectable Observable
refCount:将Connectable Observable转化为Cold(伪) Observalbe(本质为自动引用计数,自动追踪维护新订阅者与源Connectable Observable的connect关系,但不改变单一事件发送流的实质,共享同一事件对象,且只能接收订阅后发送的事件,即变成单一事件发送流的Cold Observalbe,首单订阅发生时自动开始发送事件,最后一个订阅者失效时事件发送自动结束)
share:直接等于publish+refCount,将普通Cold Observable转化为单一事件发送流的Cold Observalbe,共享事件对象

难以理解的Join

join(targetObservable, leftTimer, rightTimer, resultFunc):源Observalbe与目标Observalbe发送的事件进行融合,成为新事件并发出。即带时效版本的combineLatest。leftTimer函数接收源Observalbe事件,并据此产生临时Observalbe<?>,以其生命周期长度作为源Observalbe的每个独立事件的有效缓存期,rightTimer函数则以相同方式作为目标Observalbe的事件有效缓存期,双方每次发送的事件时刻若落在对方最近一次事件的有效缓存期内,则取出双方事件,通过resultFunc<T1,T2,R>函数进行组合运算,得到本次实际发送的结果事件R。

groupJoin(targetObservable, leftTimer, rightTimer, resultFunc):与join相同,但resultFunc函数参数为源Observalbe的一个事件A,以及在该事件有效缓存期间,由目标Observalbe发送的事件序列构成的子集Observalbe<T2>(包括之前发出但有效缓存期抵达事件A发出时刻的历史缓存事件),并返回一个事件融合结果合集Observalbe<R>(通常可通过目标子集Observalbe.map()方法得到每个目标事件与事件A加成的结果合集)。该函数最后的所有结果合集Observalbe<R>所发送的所有事件将被抽出汇入主事件流(即订阅时,得到的事件类型为该函数的合集Observalbe单个事件类型R)。

debounce(Func1->Observable) 源Observable发射一个新事件的时候,如果上一个事件通过函数Func1产生的临时Observable未结束,则上次的事件将被抛弃。(事件仅在临时Observable结束一刻实际发出)

重启订阅

repeat,在源Observable发出onCompleted事件后触发重订阅。
retry,在源Observable发出onError事件后触发重订阅。
retryWhen(Func1<Observable<Throwable> errorOb, Observable notiOb>)
每次源Observable发出onError事件,都会重用errorOb对象并传入发送新的error实体,并重用notiOb据此error决定发送onNext或complete、error终止事件,据此行为决定是否重启源Observable订阅。通常errorOb.flatMap->Observable.just(null)就足够了。需要拒绝重试,可errorOb.flatMap->Observable.error(error)。

Blocking Observable

BlockingObservable是阻塞型的Observable类型,主要用于测试和demo试验,通常不适宜用于产品开发。(当产品开发依赖于阻塞类型过程时,通常意味着设计不当)
BlockingObservable的事件发送依赖于其阻塞方法的显式调用。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260

推荐阅读更多精彩内容