在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() {
                // 刷新界面的操作放这里
            }
        });

以上就可以解决题中的异常了。

其实这种问题不该犯错的,哎。记录于此。

相关文章

暂无评论

none
暂无评论...