作者:mobiledu2502901087 | 来源:互联网 | 2023-05-17 14:00
看下面这段代码,比上一篇提到的内容多了一行.subscribeOn(Schedulers.io()),这个指定了事件发生指定的线程是在IO线程里。Observable.create(n
看下面这段代码,比上一篇提到的内容多了一行.subscribeOn(Schedulers.io())
,这个指定了事件发生指定的线程是在IO线程里。
Observable.create(new ObservableOnSubscribe() {
@Override
public void subscribe(ObservableEmitter e) throws Exception {
e.onNext("subscribe");
e.onComplete();
Log.i("zxf","subscribe");
}
}).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer() {
@Override
public void onSubscribe(Disposable d) {
Log.i("zxf","onSubscribe");
}
@Override
public void onNext(String value) {
Log.i("zxf","onNext");
}
@Override
public void onError(Throwable e) {
Log.i("zxf","onError");
}
@Override
public void onComplete() {
Log.i("zxf","onComplete");
}
});
RxJava内置的Schedulers有以下几种:
- SINGLE
- COMPUTATION
- TRAMPOLINE
- NEW_THREAD:在新线程中执行操作
- IO:尽量不要在IO线程中去做计算的操作,避免创建不必要的线程,可以看下这个方法的注释说明
/**
* Creates and returns a {@link Scheduler} intended for IO-bound work.
*
* The implementation is backed by an {@link Executor} thread-pool that will grow as needed.
*
* This can be used for asynchronously performing blocking IO.
*
* Do not perform computational work on this scheduler. Use {@link #computation()} instead.
*
* Unhandled errors will be delivered to the scheduler Thread's {@link java.lang.Thread.UncaughtExceptionHandler}.
*
* @return a {@link Scheduler} meant for IO-bound work
*/
public static Scheduler io() {
return RxJavaPlugins.onIoScheduler(IO);
}
另外还有个方法.observeOn(AndroidSchedulers.mainThread())
可以指定Subscriber
发生的线程。在不了解RxJava之前,对界面的操作是不能在非UI线程去操作的,需要new一个Thread或者使用Handler,但是现在就不用这么麻烦了,使用Schedulers
就完成了线程的切换和不同场景下的使用,而且链式结构要比单独多出来一块代码更具有易读性和整洁性。
之前看了一些介绍Schedulers
调度器源码实现的文章,看的云里雾里,具体代码层面的就不赘述了,感兴趣的可以自己研究下.