开发中遇到.observeOn(AndroidSchedulers.mainThread())报错

开发中使用io.reactivex遇到

log:
java.lang.NoClassDefFoundError: io.reactivex.Flowable

代码:

     val observable = Observable.defer(object : Callable> {

            override fun call(): ObservableSource {
                //访问网络返回数据

                return Observable.just(SecurityManager.getInstance(context).doEncryptPost(PUBLIC_URL, TransId_GPSNumQuery, params))
            }
        })
                .subscribeOn(Schedulers.io())//io线程执行
                .observeOn(AndroidSchedulers.mainThread()) // 返回值在UI线程执行

.observeOn(AndroidSchedulers.mainThread()) 始终在报错

解决方案

     val observable = Observable.defer(object : Callable> {

            override fun call(): ObservableSource {
                //访问网络返回数据

                return Observable.just(SecurityManager.getInstance(context).doEncryptPost(PUBLIC_URL, TransId_GPSNumQuery, params))
            }
        })
                .subscribeOn(Schedulers.io())//io线程执行
                .observeOn(AndroidSchedulers.mainThread(), false, 100) // 返回值在UI线程执行

原因分析

image.png

observeOn方法:

可以导入一个或两个或三个参数,且导入一个和两个参数的方法有个with Flowable字样,表示需要使用Flowable,导入三个参数的方法没有其字样,然后我用第三种方法observeOn(AndroidSchedulers.mainThread(),false,120),运行成功。

“island size”

这三个方法都提及到了”island size”,中文字面翻译“岛屿大小”,比较抽象,我把它叫做背压堆积大小。

rxJava 2.x中只有两个观察者:

  • 一个是Observable
  • 一个是Flowable

它合并了rxJava 1.x的Subscriber,并多了一个onSubscribe方法(即原来Subscriber的onStart方法),用来进行订阅的初始化操作。

Flowable

自动背压堆积并支持匹配背压堆积大小”island size”,Observable并不会,所以在Observable订阅时要多加入一个int值,用与指定背压堆积大小。

所以,背压概念是rxJava 2.x中无时无刻都要注意的地方。

你可能感兴趣的:(开发中遇到.observeOn(AndroidSchedulers.mainThread())报错)