RxJava的简单学习和使用

查看这篇博文:给 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(){
   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使用

RxJava的简单学习和使用_第1张图片
image.png

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

![image.png](http://upload-images.jianshu.io/upload_images/4127965-b825441b453ac783.png?
imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

使用RxBind和RxJava结合使用:


RxJava的简单学习和使用_第2张图片
image.png
RxJava的简单学习和使用_第3张图片
image.png

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

RxJava的简单学习和使用_第4张图片
image.png
RxJava的简单学习和使用_第5张图片
image.png

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

RxJava的简单学习和使用_第6张图片
image.png
RxJava的简单学习和使用_第7张图片
image.png

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

RxJava的简单学习和使用_第8张图片
image.png
RxJava的简单学习和使用_第9张图片
image.png
RxJava的简单学习和使用_第10张图片
image.png
RxJava的简单学习和使用_第11张图片
image.png

你可能感兴趣的:(RxJava的简单学习和使用)