Only the original thread that created a view hierarchy can touch its views. Expected: main Calling: pool-5-thread-1
时间: 2024-04-25 19:18:54 浏览: 159
这句话的意思是,只有创建这个view的线程才能操作这个view。如果在非创建view的线程中尝试操作view,会抛出异常。解决这个问题的方法是使用Handler来在正确的线程中操作view。
以下是一个示例代码,演示了在不同线程中操作view的情况:
```java
// 创建一个Handler对象,用于在主线程中操作view
Handler mHandler = new Handler(Looper.getMainLooper());
// 在主线程中创建一个view
TextView textView = new TextView(MainActivity.this);
// 在其他线程中尝试操作view
new Thread(new Runnable() {
@Override
public void run() {
// 在非主线程中尝试更新view的文本
textView.setText("Hello World"); // 这里会抛出异常
// 使用Handler将更新view的操作post到主线程中执行
mHandler.post(new Runnable() {
@Override
public void run() {
textView.setText("Hello World"); // 在主线程中更新view的文本
}
});
}
}).start();
```
在上述代码中,我们创建了一个Handler对象,并将其与主线程的消息队列关联起来。然后,在其他线程中尝试直接更新view的文本时,会抛出异常。为了解决这个问题,我们使用Handler的post方法将更新view的操作post到主线程中执行,这样就可以避免异常的抛出,确保只有创建view的线程才能操作view。
阅读全文