小白学习Rxjava2,从零开始到实战(一) RxJava2的基础使用

来源:互联网 发布:火爆网络的ann是谁 编辑:程序博客网 时间:2024/06/05 08:23

  • 前言
  • 小白学习之我见
  • 正文
    • 导入Rxjava2
    • Rxjava2的简单使用
  • 总结

前言

RxJava是什么?
RxJava 在 GitHub 主页上是这样说的 “a library for composing asynchronous and event-based programs using observable sequences for the Java VM”(一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库)。
恩,简单来说,异步操作库。

RxJava的特点?
简洁。
这里的简洁并不是指代码长度,而是逻辑上的简洁。具体的解释可以看下扔物线大大的博客,里面介绍的很详细:给 Android 开发者的 RxJava 详解

为什么选择RxJava2?
Rxjava 2 vs Rxjava1 ,是否要升级?
总结一下:Rxjava2在背压问题上做出了解决方案,提升了性能,但相应的,部分写法变得更加复杂。
现阶段Rxjava还在维护,使用的话,完全没有问题;但是,如果你的应用还有较长的使用时间,而且有像传感器那样一秒连戳几十下的操作,那最好还是升级到Rxjava2;

小白学习之我见

个人评价:
如果是跟我一样之前没搞过Rxjava,那么感觉还是直接从Rxjava2学起吧,毕竟以后还是要学的,这一刀跑不了。

难度方面:
如果没有点基础,刚上来还是有点难度的,毕竟从最直观的代码长度上来看,RxJava没有太大优势,而且要想理解其中的原理还是有点难度的;不过只是想学会怎么用的话,难度还是可以的。(顺便吐槽下,好多都是讲一遍观察者,订阅者,订阅关系………………,讲这么多名词,绕都绕晕了,刚上来谁知道订阅是个什么东西啊)

顺便提一下这篇博客:给初学者的RxJava2.0教程(一),感觉写的非常不错。

正文

导入Rxjava2

build.gradle中加入

    compile "io.reactivex.rxjava2:rxjava:2.0.7"    compile 'io.reactivex.rxjava2:rxandroid:2.0.1'

Rxjava2的简单使用

最简单的Rxjava2的使用就像下面这样:

//创建订阅者Subscriber<String> subscriber = new Subscriber<String>() {    @Override    public void onSubscribe(Subscription s) {    //这一步是必须,我们通常可以在这里做一些初始化操作,调用request()方法表示初始化工作已经完成    //调用request()方法,会立即触发onNext()方法    //在onComplete()方法完成,才会再执行request()后边的代码    s.request(Long.MAX_VALUE);    }    @Override    public void onNext(String value) {        Log.e("onNext", value);    }    @Override    public void onError(Throwable t) {        Log.e("onError", t.getMessage());    }    @Override    public void onComplete() {    //由于Reactive-Streams的兼容性,方法onCompleted被重命名为onComplete        Log.e("onComplete", "complete");    }};Flowable.create(new FlowableOnSubscribe<String>() {    @Override    public void subscribe(FlowableEmitter<String> e) throws Exception {        e.onNext("Hello,I am China!");    }}, BackpressureStrategy.BUFFER)    .subscribe(subscriber);  

具体分析一下的话,可以这么想象:
你的Boss现在给你提了个需求:
有两种盒子,一种名叫Flowable,一种名叫Subscriber,其中Flowable放了很多个小球,现在你要做的事,就是把Flowable中的小球放到Subscriber中,然后读出来贴在小球上的标签。

那么,我们该怎么做呢?
第一步,首先要挑出这两个盒子,名为Flowable的盒子就是通过create方法创建,称之为被观察者,名为Subscriber的盒子可以直接new出来,称之为观察者/订阅者
第二步,就是要确定,我是要把Flowable中的小球放到哪个Subscriber中,这就是代码中的subscribe方法,告诉Flowable,你的小球发到哪个Subscriber盒子中,这个过程就叫做订阅
第三步,就可以动手把Flowable中的小球拿出来了,拿出小球的过程就是Flowable.create方法中的subscribe

    @Override    public void subscribe(FlowableEmitter<String> e) throws Exception {        e.onNext("Hello,I am China!");    }

在这个方法中,出现了一个FlowableEmitter,这个Emitter就是发射器的意思,可以想象成拿出小球的那只手;e.onNext("Hello,I am China!");可以理解为,用名为FlowableEmitter的手,拿出一个带有"Hello,I am China!"标签的小球。如果你要想再拿出个小球,那就再写一遍onNext即可;
第四步,好了,拿出小球了,总要放到另一个盒子中吧,这时候就到了Subscriber这个盒子中了。首先,这个盒子跟上个盒子Flowable稍微有点不同,它有一个盖子:Subscription

    @Override    public void onSubscribe(Subscription s) {    //这一步是必须,我们通常可以在这里做一些初始化操作,调用request()方法表示初始化工作已经完成    //调用request()方法,会立即触发onNext()方法    //在onComplete()方法完成,才会再执行request()后边的代码    s.request(Long.MAX_VALUE);    }

这个盖子的作用就是控制进入Subscriber中小球的数量和速度的,还记得Rxjava2和Rxjava1的区别之一——背压问题么,这块就是通过这个盖子来控制解决的;如果,你不想让小球进入盒子,那么直接Subscription.cancle(),如果想让每回只进入10个小球,那就Subscription.request(10);当然,背压问题不是仅仅这么就能解决的,具体解决方案在后面会提到。
第五步,ok,小球放进去了,就剩读标签这个操作了,读标签这个操作就是onNext方法,相应的出错和完成方法就是onErroronComplete

    @Override    public void onNext(String value) {        Log.e("onNext", value);    }    @Override    public void onError(Throwable t) {        Log.e("onError", t.getMessage());    }    @Override    public void onComplete() {    //由于Reactive-Streams的兼容性,方法onCompleted被重命名为onComplete        Log.e("onComplete", "complete");    }

总结

到这里,基本的简单使用,就是这样,当然用Rxjava2不可能就这么使用就ok了,异步操作这一重点会放到下一章来说明。不过现在要学习的是retrofit

2 0
原创粉丝点击