在Android开发中,如果在非UI线程中尝试修改UI元素,就会抛出android.view.ViewRootImpl$CalledFromWrongThreadException异常。为了解决这个问题,可以使用以下方法:
runOnUiThread(new Runnable() {
@Override
public void run() {
// 在主线程中更新UI元素
textView.setText("Hello World");
}
});
Observable.just("Hello World")
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer() {
@Override
public void accept(String s) throws Exception {
// 在主线程中更新UI元素
textView.setText(s);
}
});
在上面的代码中,使用observeOn()方法将操作切换到主线程,然后在subscribe()方法中更新UI元素。
需要注意的是,以上方法适用于在非UI线程中更新UI元素的场景。如果在主线程中遇到这个异常,那可能是因为在主线程中执行了耗时操作,导致UI线程被阻塞。在这种情况下,应该考虑将耗时操作移至后台线程执行,以避免阻塞UI线程。
上一篇:android.view.View, android.widget.TextView 在 androidx 中的对应类是什么?
下一篇:android.view.WindowLeaked: 因为这个dialog.getWindow.setBackgroundDrawableResource,导致窗口泄漏。