前言
优秀文章推荐
基础知识
掌握 Java 8 Lambda 表达式
http://geek.youkuaiyun.com/user/publishlist/icess
http://blog.chinaunix.net/uid-20771867-id-5187376.html
http://akarnokd.blogspot.hu/2015/05/operator-concurrency-primitives_86.html
http://blog.danlew.net/2015/07/23/deferring-observable-code-until-subscription-in-rxjava/
其实最好的学习方法,还是阅读源码,RTFSC你懂得!!!
这里推荐一个Demo:
https://github.com/Chaoba/RxJavaDemo推荐这个demo,并不是因为它很牛X,而是因为它对Rxjava的演示比较全面。里面有一些瑕疵,你可以举一反三的修正过来!当然,clone下来代码后,不仅要看,还要不断的修改测试,达到深入理解的目的!Rxjava的大多数优秀的教程都是英文版的,对于英文不是很好的童鞋,RTFSC是很好的快速的学习Rxjava的方式。
使用RxAndroid的一点体会
最近一个项目,引用了一个第三方的支付,需要向该支付传一个回调,我在回调里做了一些处理。但是就奇了怪了吐司总是吐不出,Ui(Dialog无法取消),很无奈啊。。。最后才搞明白,这个回调是在子线程中执行的。你说,生气不生气?无奈的很,不得不创建一个handler,例如:
Handler handler = new Handler(context.getMainLooper()) {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
}
}
最后再在这个回调里面发送handler消息。不过加入有了RxJava,又会是怎样的一种场景呢?
在回调里面只需执行,同时你也不用担心该回调在哪个线程执行:
Observable.just(arg0).observeOn(AndroidSchedulers.mainThread()).subscribe(new Action1<String>() {
@Override
public void call(String s) {
Toast.makeText(mContext, "成功了", Toast.LENGTH_SHORT).show();
}
});
是不是很霸气的感觉?如果用上java8支持的Lambda变成界面更加清爽。不是说RxJava具有其他知识无法完成的工作,只是说它提高了开发的效率。这一点很赞!
怎样学习Rxjava
对于Reactive 的学习,主要的是对其思想的理解,其次重点是其操作符的学习。对其思想的理解,只能软磨硬泡,不是短期就能促成的,对操作符的理解,重点在于实践。
关于操作符的官方文档
对于你应该选择什么样的操作符,这里翻译一下官方的文档,我觉得写得比较不错:
主要的操作符学习
先来表述一下用于描述操作符的图:
用于创建Observable的操作符
*create:创建一个新的Observable,并会擦除数据流之前的数据。
例如:你使用just创建了一个Observable之后又链式调用create这是just的数据流会被擦除。
range操作符:用于创建数据流为一个范围的Observable例如:
Observable.range(10, 5);//这是数据流为10,11,12,13,14,用于返回一段连续的整数
just:其实质还是调用from的迭代创建Observable;
defer相对于just,defer会为每一个订阅者创建一个全新的Observable,且在被订阅后才会为其创建Observable。这是一个很实用的操作符。一个经典案例:Deferring Observable code until subscription in RxJava
repeat:重复Observable的item并返回
形象图:
Observable的衍生品Single
相比于Observable处理的onNext,onError,onComplete,Single就相对的简单了一些,只有onSuccess()和onError()
Observable线程规划者Scheduler
Observable可以通过Scheduler自由的切换线程。你可以自定义线程,也可以使用Schedulers预先定义好的几个线程,例如INSTANCE.ioScheduler
,TestScheduler
,INSTANCE.computationScheduler
,另外RxAndroid还特别提供了AndroidSchedulers.mainThread()
。对于Observable创建的过程的线程可以通过subscribeOn()进行指定,可以通过observeOn()来指定操作符发送消息的进程。官方给出的图解:
关于上图的说明:
其中subscribeOn可以出现在链式表达式的任何地方,用于制定Observable的创建过程。而observeOn指定了下一个操作符执行的线程。如果某一个操作符没有指定线程,则默认向前寻找。
其中①是Observable的创建过程,由subscribeOn指定。而②的线程由第1个observeOn指定。由于没有对③进行指定,因此默认向前寻找,即在同线程②。④同③。而⑤由第2个observeOn指定。
——————————————————-
文章有点乱,待整理完善!!!
未完待续……