美文网首页
RxJava的简单学习和使用

RxJava的简单学习和使用

作者: 破荒之恋 | 来源:发表于2017-05-22 15:16 被阅读70次

    查看这篇博文:给 Android 开发者的 RxJava 详解
    http://gank.io/post/560e15be2dca930e00da1083#toc_8

    在了解RxJava基本使用和总结线程控制使用范围:

    • Schedulers.immediate();
      直接在当前线程运行,相当于不指定线程。这是默认的scheduler
    • Schedulers.newThread();
      总是启用新的线程,并在新线程执行操作。
    • Schedulers.io();
      I/O操作(读写文件、读写数据库、网络信息交互等)所使用的Scheduler。行为模式和newThread()差不多,区别在于io()比newThread()更有效率。不要把计算工作放在io()中,可以避免创建不必要的线程。
    • Schedulers.computation();
      计算所使用的Scheduler。这个计算所指的是CPU密集型计算,既不会被I/O等操作限制性能的操作,例如图形的计算。这个Scheduler使用的固定的线程池,大小为CPU核数。不要把I/O操作放在Computation()中,否则I/O操作的等待时间会浪费CPU。
    • AndroidSchedulers.mainThread();
      它指定的操作将会在Android主线程运行。

    想了解更深的可以点击这里深入学习 RxJava : https://mcxiaoke.gitbooks.io/rxdocs/content/

    RxJava主要的实际应用有如下几个例子:

    实现防止按钮重复(连续)点击
    使用操作符 ThrottleFirst :
    允许设置一个时间长度,之后它会发送固定时间长度内的第一个事件,而屏蔽其他事件,再间隔达到设置的时间后,才可以再发送下一个事件

     RxView.clicks(button).throttleFirst(1,TimeUnit.SECONDS).  //1是防止1秒之内连续点击
      subscribe(new Observer<void>(){
       public void onCompleted(){
       }
       public void onError(Throwable e){
       }
       public void onNext(Void avoid){
         Log.d("Activity","这是按钮点击");
       }
    });
    
    //debounce可以代替throttleFirst,同样能够实现这个功能。
    
    

    登录获取用户信息
    使用操作符Map对Observerable发射的每一项数据应用一个函数,执行变换操作然后返回一个发射这些结果的Observable 。

    而FlatMap将一个发射数据的Observable变换为多个Observables,然后将他们发射的数据合并后放进一个单独的Observable;结合Retrofit使用

    image.png

    关键词搜索案例
    RxJava和RxBind的联合使用

    ![image.png](https://img.haomeiwen.com/i4127965/b825441b453ac783.png?
    imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

    使用RxBind和RxJava结合使用:


    image.png image.png

    合并两组数据一起显示(网络和本地-----购物车案例)
    Merge操作符可以合并多个Observables的发射物,使用Merge操作符可以将多个Observables的输出合并,就好像他们是一个单个的Observables一样。
    Merge可能会让合并的Observables发射的数据交错(有一个类似的操作符concat不会让数据交错,它会按顺序一个接着一个发射多个Observables的发射物。)

    image.png image.png

    发送验证码倒计时结束后恢复可用
    操作符take(cout)倒计时的时间count
    操作符map(new func1<Long,Long>)转换数字long--->long

    image.png image.png

    图片缓存---检查memrory,disk,network案例
    请求图片的流程图如下:点击加载图片就近原则获取图片,有就直接加载,没有就到下一环节获取图片。
    使用如下,具体的实现就不介绍了,不会的 的去google吧

    image.png image.png image.png image.png

    相关文章

      网友评论

          本文标题:RxJava的简单学习和使用

          本文链接:https://www.haomeiwen.com/subject/jbabxxtx.html