在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() { // 刷新界面的操作放这里 } });
以上就可以解决题中的异常了。
其实这种问题不该犯错的,哎。记录于此。
© 版权声明