2个按钮,点击开始按钮用handler创建一个线程,然后不断的回调,在消息处理中设置文本框的内容;
在结束按钮清空文本框的内容,但是快速不断按那个结束按钮的时候,界面中的文本内容并不会被清空,这是为什么。
代码如下:
class StartSocketListener implements OnClickListener
    {  
        public void onClick(View v)
        {
         if(Flag)
         {
         Flag = false;
         startbutton.setText("开始");;
                Handler.post(updateThread);  
         }
         else
     {
         Flag = true;
     Handler.removeCallbacks(updateThread);
    
ver.setText("");
startbutton.setText("结束");     }
        }  
}Handler Handler = new Handler(){
        @Override  
        public void handleMessage(Message msg)
        {
         ver.setText("asd");            Handler.post(updateThread);
        }  
    }; 
Runnable updateThread = new Runnable(){
public void run()
{
         try
     {       
     Message msg = Handler.obtainMessage();           Handler.sendMessage(msg);
     } 
         catch (Exception e) 
     {
     e.printStackTrace();
     }
     }
}; 

解决方案 »

  1.   

    这样写有问题吧,你会一直不停的循环执行.
    Handler.post(updateThread)->updateThread->Handler.sendMessage(msg)->Handler.post(updateThread).............
    所以,你点击button后,并没有结束
      

  2.   

    Handler.removeCallbacks(updateThread);已经停止了
      

  3.   

    不停的post,已经放入队伍好多个,而你移除的只有当前的那个.
      

  4.   

    Handler.sendMessage(msg)--》 handleMessage(Message msg) --》Handler.pos(updateThread)--》Handler.sendMessage(msg)貌似一直在循环,然后一直在执行ver.setText("asd");
      

  5.   

    执行完一次在发送message,然后在执行的