android - Rxjava AndroidSchedulers.mainThread() 表示 UI 线程?

标签 android rx-java

我的代码是这样的:

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

但我得到一个错误:只有创建 View 层次结构的原始线程才能触及它的 View 。 所以我将其更改为:

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

很有道理。所以我很困惑。 我原以为 .observeOn(AndroidSchedulers.mainThread()) 意味着订阅 block 中的代码在 ui 线程上运行,但我怎么会得到这个错误?

最佳答案

这里的代码有问题:

.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(AndroidSchedulers.mainThread())

您不能像您注意到的那样在 UI 线程上订阅,您会得到一个异常:

Only the original thread that created a view hierarchy can touch its views.

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

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

关于android - Rxjava AndroidSchedulers.mainThread() 表示 UI 线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35027712/

相关文章:

android - Observable<Object> 的可变列表等到它们全部完成并将它们组合成一个 List<Object>

android - RxJava mixLatest - 可从更改中观察到

android - 如何在我的项目中激活proguard?

android - 为什么 AdMob 广告频次上限不起作用?

android - Android 上的 oauth_callback

android - 改造默认线程

C# Xamarin.Android 图像显示在文件管理器中而不是库中

java - 不支持 ISO 3166 国家 ES?

java - 如何在 Observable 中循环并限制每次获取的项目数

java - 测试用例运行时不会调用 Rx onErrorReturn