【发布时间】:2018-03-18 18:38:47
【问题描述】:
我正在处理这个问题。
我正在尝试以同步方式调用 RxJava,但是这样做会导致主线程阻塞。
这是我的代码
@Override
public Single<SettingsBundle> getSettings() {
SettingsBundle settingsModel = mSettingsManager.getSettings();
return Single.just(settingsModel).map(mSettingsMapper);
}
这是我的同步通话
@Override
public SettingsBundle getSettingsSync() {
return getSettings().blockingGet();
}
调用getSettingsSync时,主线程被阻塞,但有时它工作正常,问题更大。
我尝试过类似的方法
@Override
public SettingsBundle getSettingsSync() {
return getSettings()
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.blockingGet();
}
但它仍然被阻止。
我做错了什么,我将不胜感激。
谢谢。
【问题讨论】:
-
阻塞所有将阻塞,直到有数据。不要在 UI 线程上使用一个。要么让另一个线程来做,要么使用非阻塞调用。
-
您的问题到底是什么?
blockingGet()调用将阻塞 current 线程,直到数据可用,这是预期的行为。你想达到什么目标? -
@GergelyKőrössy ,它没有被释放导致我的线程卡住
-
如果你不想阻塞 UI 线程,那么不要使用名称中带有“阻塞”的
blockingGet
标签: android multithreading rx-java rx-java2