RxJava简介
RxJava是现在大火的一个异步框架,他代码简洁好懂,功能强大,扩展性高,维护难度小。RxJava最吸引人的功能就是它的线程切换功能。在Android开发中,UI组件只能在主线程中进行,但是主线程中执行太复杂的逻辑又会导致APP卡顿,因此灵活的线程切换是一个安卓开发工程师的必会技能。RxJava提供了优秀的线程切换能力,能在不同的线程执行规定的逻辑代码。
这次就来聊一聊RxJava是怎么实现线程切换。
首先RxJava的一切转换功能都是基于lift这个方法产生代理对象完成,关于这部分我之前有写过一篇博客。
RxJava的源码分析(map,flatmap和类型变换)
大家可以先了解一下lift方法的工作原理,本文就不在赘述了。
示例代码
public class RxJavaTest_1 {
public static void main(String[] args) throws InterruptedException {
Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
//打印call方法所在线程
System.out.println("call : " + Thread.currentThread());
subscriber.onNext("doOnNext");
subscriber.onCompleted();
}
})
.subscribeOn(Schedulers.newThread())
.observeOn(Schedulers.newThread())
.subscribe(new Subscriber<String>() {
@Override
public void onCompleted() {
System.out.println("onCompleted : " + Thread.currentThread());
}
@Override
public void onError(Throwable throwable) {
System.out.println("onError : " + Thread.currentThread());
}
@Override
public void onNext(String s) {
//答应onNext方法所在线程
System.out.println("onNext : " + Thread.currentThread());
}
});
Thread.sleep(1000);
//打印主线程
System.out.println("main : " + Thread.currentThread());
}
}
RxJava提供subscribeOn和observeOn两个方法去更换线程,subscribeOn可以指定subscribe方法运行的线程,observeOn可以指定Subscriber对象的方法被回调时执行的线程。
下图是上面代码的执行结果