查看这篇博文:给 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
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 image.png image.png图片缓存---检查memrory,disk,network案例
请求图片的流程图如下:点击加载图片就近原则获取图片,有就直接加载,没有就到下一环节获取图片。
使用如下,具体的实现就不介绍了,不会的 的去google吧
网友评论