android相关的view线程是不安全的(Only the original thread that created a view hierarchy can touch its views)

嗯,这里是简介,主题配置内可以修改,如留空则不显示

android相关的view线程是不安全的(Only the original thread that created a view hierarchy can touch its views)

前面相关的,主线程不妨操作其他(网络相关)的任务是为了防止GUI阻塞,这些任务需要放到其他的线程,那么其他的线程也不能操作GUI相关的组件,也就是说android相关的view线程是不安全的,会有类似(Only the original thread that created a view hierarchy can touch its views)这样的错误。

文章http://blog.csdn.net/breeze666/article/details/7570914给出了详细的说明,还给了详细的Android的消息传递机制。

Android系统中的视图组件并不是线程安全的,如果要更新视图,必须在主线程中更新,不可以在子线程中执行更新的操作。 既然这样,我们就在子线程中通知主线程,让主线程做更新操作吧。那么,我们如何通知主线程呢?我们需要使用到Handler对象。

我的项目中的代码如下:

/*set login button click listener*/
        login_button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                show_textvied.setText("begining");
                Log.v(TAG, "begining");
                /*get name and password*/
                String login_name = name_edittext.getText().toString();
                String login_password = passwort_edittext.getText().toString();
                Log.v(TAG, login_name + "-" + login_password);
                /*new Thread to send post*/
                WorkThread doPostThread = new WorkThread();
                doPostThread.setUsername(login_name);
                doPostThread.setPassword(login_password);
                doPostThread.start();
            }
        });

private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            if (msg.what == COMPLETED) {
                String result = (String) msg.obj;
                String new_result = StringEscapeUtils.unescapeJava(result);
                result = UnicodeUtil.decodeUnicode(new_result);
                try {
                    JSONObject jo = new JSONObject(result);
                    if (jo.has("success")) {
                        show_textvied.setText("success info:" + result);
                    } else {
                        show_textvied.setText("error info:" + result);
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            } else if (msg.what == BEGIN) {
                show_textvied.setText("begining");
            }
        }
    };


参考资料:
http://blog.csdn.net/breeze666/article/details/7570914


发表评论

必填

选填

选填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Hello world. 豫ICP备16008819号-1.

Power by Z-BlogPHP  Theme by wzdaxue