java 轮询请求_使用RxJava来实现网络请求轮询功能

原标题:使用RxJava来实现网络请求轮询功能

近日有媒体报道称,腾讯重金入股永辉超市旗下生鲜超市超级物种,目前交易已经完成。受此刺激,永辉超市股价迅速涨停,午后临时停牌。若此举成行,超级物种将更有底气对垒阿里巴巴的盒马鲜生,生鲜商超的新零售市场将展开激烈争战。

作者简介

各位小伙伴们大家早上好,新的一周又开始了,希望大家都能有个好心情迎接新的一周。

本篇来自juexingzhe的投稿,分享了一种通过RxJava来轮询的实现方式,希望大家喜欢!

juexingzhe的博客地址:

http://www.jianshu.com/u/ea71bb3770b4

前言

轮询的功能很常见了,之前 Android 中比较常用的方式就是通过 Handler 来实现,发送一个 Deley 消息,在 handlerMessage 再根据条件发送消息,这种方式需要小心内存泄漏,需要自己处理这个问题。这个不是我们今天的重点,今天来看下另外一种轮询的实现方式,通过 RxJava 来实现。

开始

通过 RxJava 来实现的方式有下面两个特点:

自动解除轮询和订阅关系,没有内存泄漏的风险;

可以跟 Activity 或者 Fragment 生命周期绑定,自动停止轮询

涉及到的RxJava知识点:

Subject

TakeUntil

Filter

Compose

因为后面很多逻辑用到上面的操作符,所以先简单看下这几个操作符,热热身。

Subject

从代码可以看出来 Subject 既可以当观察者也可以当被观察者。

publicabstractclassSubject extendsObservable implementsObserver

所以可以在生命周期中通过 Subject 发送事件然后又自己接收,从而根据事件类型做相应的操作。

Subject 总共有四种类型

AsyncSubject

BehaviorSubject

PublishSubject

ReplaySubject

今天我们就说下第二种类型 BehaviorSubject,它可以给订阅者发送订阅前最近的事件和订阅后发送的事件:

10ff33b32074a4a2e65e46b95e5b6f63.png

图中橙色的就是订阅前最近发送的事件,在订阅后也可以收到。文字解释始终太苍白,我们来看下代码:

BehaviorSubject behaviorSubject = BehaviorSubject.create(); behaviorSubject.onNext( 1); behaviorSubject.onNext( 2); behaviorSubject.subscribe( newConsumer() { @Overridepublicvoidaccept(Integer integer)throwsException{ Timber.tag(TAG).d( "running num : "+ integer); } });

behaviorSubject.onNext( 3); behaviorSubject.onNext( 4);

上面代码运行结果就是收到2, 3,4

c3ad162529aa4316dd66b36cb9d54e61.png

TakeUntil

这是一个操作符,可以这样用

AObservable.takeUntil(BObservable)

可以 AObservable 监听另外一个 BObservable,如果 BObservable 开始发送数据,AObservable 就不再发送数据。

看一下官方的图片解释,B 发送 0 数据后,A 就停止发送数据了。

6e84aa443ae3de1addc6392bb34aef73.png

talk is cheap, show me the code:

Observable.interval( 1, TimeUnit.SECONDS). subscribeOn(Schedulers.io()). takeUntil(Observable.timer( 5, TimeUnit.SECO

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值