java 场景处理,最适合使用RxJava处理的四种场景

RxJava是异常热点的函数响应式编程库,在Android开辟中已经异常风行了,刚开端上手会有点难,但只要懂得了它,就再也回不去了;不应用RxJava写异步请求的话,就感到各类不爽。

本文不预备讲RxJava的基本常识,如不雅你对RxJava不熟悉,这里有篇不错的教程可以参考 《给 Android 开辟者的 RxJava 详解》 。

下面我们开端介绍RxJava最合适应用的四种场景,代码示例基于RxJava1

场景一: 单请求异步处理

因为在Android UI线程中不克不及做一些耗时操作,比如收集请求,大年夜文件保存等,所以在开辟中经常会碰着异步处理的情况,我们最典范的应用处景是RxJava+Retrofit处理收集请求public void updateUI(Data data){ //TODO something}public void showError(throwable t){ //show error msg}

场景二: 多异步请求持续调用

这种场景其实也很常见,我们做用户头像编辑的应用,一般就会有三个请求须要持续调用:请求头像上传的地址

上传头像

更新用户信息

在日常平凡的代率攀里,我们须要一步步callback嵌套下来,代码冗长太难看,并且不好保护,应用RxJava链式调用处理代码逻辑就会异常清楚Observable.just(1) .map(this::task1) .map(this::task2) .map(this::task3) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(this::updateUI, this::showError);

这里的just发送的固定值1,没有实际意义,只是我认为如许更信息

你也可以用Observable.create创建observable。

场景三: 多异步请求归并处理

有时刻在项目中,我们会碰着组合多个请求的结不雅后,再更新UI的情况,比如我们项目中就有一个大年夜多个请求地址获取通知数据,然后在APP上再按时光次序组合后展示的需求,这时刻我们就可以用RxJava的zip函数来处理了MyService myService = retrofit.create(MyService.class);Observable o1 = myService.getNotification1();Observable o2 = myService.getNotification2();Observable.zip(o1,o2, this::combiNotification) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(this::updateUI, this::showError);public List combiNotification(List n1, List n2){ //TODO 归并通知列表}

93c5af9611b65f9f83adce0aba464dda.jpg-wh_651x-s_3712795448.jpg

为了使代码看起来简洁点,这边还应用了lambda表达式, updateUI 和 showError 须要在当前类中实现,比如:

zip函数会等待两个请求都完成后,调用我们的归并办法combiNotification,等归并处理后再回调subscribe中的办法。

场景四: 准时轮询

RxJava还特别合适对准时轮询义务的处理, 一种典范的例子就是APP提交了一个义务给后台异步处理,假设后台处理须要1-2分钟阁下,我们须要准时到后台萌芽进度,并更新到UI上, 传统的做法是用Handler的postDelay办法,用RxJava实现的话就会异常简洁Subscription subscription = Observable.interval(2, TimeUnit.SECONDS) .map(this::getProgress) .takeUntil(progress -> progress != 100) .subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Subscriber() { @Override public void onCompleted() { //TODO finished } @Override public void onError(Throwable e) { } @Override public void onNext(int progress) { //TODO update progress } });

我们以准时2秒萌芽一次,直到进度progress=100为止,主动终止轮询。

以上各类RxJava办法都是异步耗时调用,推敲到Activity的退出时请求还没有完成,我们须要在Activity的OnDestroy办法中撤消RxJava调用subscription.unsubscribe();

【编辑推荐】外媒速递:实现WIndows 10 PC与Android顺畅协作的七种方法

外媒速递:6个最常见的Android问题解决筹划

谷歌嫌Android开源问题太多,计算开辟第二个iOS

即将到来的I/0大年夜会,Android将解决安卓碎片化

外媒速递:iOS 11仍未能成功惹人的六项Android功能【义务编辑:张燕妮 TEL:(010)68476606】MyService myService = retrofit.create(MyService.class);myService.getSomething() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(this::updateUI, this::showError);

推荐阅读

8月31日消息 距离Android Oreo正式版宣布还不抵站周,甚至谷歌旗下Pixel手机也于近日才收到OTA更新。可是,谷歌似乎迫在眉睫地想要开辟下一代安卓体系Android P了。日前,XDA开辟者Mishaa>>>详细阅读

地址:http://www.17bianji.com/lsqh/37098.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值