我正在尝试使用 RxJava 在加载某些方法期间显示 AlertDialog。它不起作用,UI 被阻塞 2 秒,当使用调试器单步执行它时,调试器显示它在 UI 线程上运行。我已经添加了 Schedulers.IO,那么我做错了什么?
boolean initialize() {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
}
return true;
}
public AlertDialog showSomePopup(Context context, String msg) {
return new AlertDialog.Builder(context)
.setTitle("Loading...")
.setMessage(msg)
.setPositiveButton("Ok", null)
.show();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final AlertDialog dialog = showSomePopup(this, "Waiting ..");
Single.just(initialize())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<Boolean>() {
@Override
public void accept(@NonNull Boolean aBoolean) throws Exception {
dialog.dismiss();
}
});
}
最佳答案
问题是 .subscribe()
在 initialize()
方法未发出之前不会被调用(即当您使用 .just()
,直到 initialize()
不返回。
关于android - RxJava 在相同的阻塞 UI 线程上运行并且不显示 AlertDialog,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46640963/