android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
时间: 2023-11-18 19:04:28 浏览: 82
这个异常通常是因为在非 UI 线程中尝试修改 UI 控件,而 Android 中 UI 控件只能在主线程中更新。为了解决这个问题,你可以使用以下几种方法:
1. 使用 Handler:在非 UI 线程中使用 Handler 将更新 UI 的代码发送到主线程,如下所示:
```
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
// 在这里更新 UI 控件
}
});
```
2. 使用 AsyncTask:使用 AsyncTask 将耗时操作放到 doInBackground() 方法中,在 onPostExecute() 方法中更新 UI 控件。
3. 使用 runOnUiThread() 方法:在 Activity 中可以使用 runOnUiThread() 方法将更新 UI 的代码发送到主线程,如下所示:
```
runOnUiThread(new Runnable() {
@Override
public void run() {
// 在这里更新 UI 控件
}
});
```
注意,以上三种方法都是将更新 UI 的代码发送到主线程中执行,所以会有一定的性能开销。如果你需要频繁更新 UI 控件,建议使用 RecyclerView 或 ListView 等控件来优化性能。
阅读全文