Rxjava AndroidSchedulers.mainThread() 表示 UI 线程



我的代码是这样的:

.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(AndroidSchedulers.mainThread())
.subscribe ({
    adapter.notifyDataSetChanged()
})

但是我收到一个错误:只有创建视图层次结构的原始线程才能触摸其视图。所以我把它改成:

.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(AndroidSchedulers.mainThread())
.subscribe ({
        runOnUiThread(Runnable {
            adapter.notifyDataSetChanged()
 })
 }

这是有道理的。所以我很困惑。我曾认为.observeOn(AndroidSchedulers.mainThread())意味着订阅块中的代码在 ui 线程上运行,但我是如何得到这个错误的?

问题出在这里的代码上:

.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(AndroidSchedulers.mainThread())
正如

您所注意到的,您无法在 UI 线程上订阅,您将收到一个异常:

只有创建视图层次结构的原始线程才能接触其视图。

您应该做的是在 I/O 线程上订阅并在 UI 线程上观察:

.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe ()

这样的事情会起作用:

observerable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()) //works Downstream
.subscribe ({
   adapter.notifyDataSetChanged()
})

最新更新