在service中回调时通知界面刷新了数据,就提示了如下异常:
Only the original thread that created a view hierarchy can touch its views.
翻译了一下:只有创建了视图层次结构的原始线程才能访问它的视图
意思就是只有在主UI线程才可以刷新UI。
哎,其实这个我们都知道的,但总是无意有意的忘了这个,太大意了。因此,记录于此。
解决这个办法就是把刷UI的操作都放在UI主线程就可以了。
解决方式:
1、使用Handler处理。
# MSG_UPDATE_UI
mHandler.sendEmptyMessage(MSG_UPDATE_UI);
private Handler myHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
// 刷新界面的操作放这里
}
};
或者
myHandler.post(new Runnable() {
@Override
public void run() {
// 刷新界面的操作放这里
}
});
2、使用runOnUiThread()
runOnUiThread(new Runnable() {
@Override
public void run() {
// 刷新界面的操作放这里
}
});
以上就可以解决题中的异常了。
其实这种问题不该犯错的,哎。记录于此。
