停止以前的Handler postdelayed并开始新的

时间:2013-12-18 07:30:04

标签: java android handler

我使用Handler postDelayed()启动计时器7秒。如果在此间隔期间我收到服务器的回复,我将停止计时器。但如果回复未在7秒内收到,则会显示错误。

我正在使用此代码

handler = new Handler();

Runnable wait4TO = new Runnable(){
    @Override
    public void run() {
        if(pressedButton==INACTVE) ;
        // if reply is recieved pressedbutton will be INACTIVE

        else
        {
            sentFailed();
        }

    }
};

handler.postDelayed(wait4TO, 7000 );

它可以正常工作,但如果发送了另一条消息,我想取消此超时并启动一个新超时或将现有超时延长7秒。我怎么能实现这个目标呢?

我尝试使用handler.removeCallbacks(wait4TO)handler.removeCallbacks(null)取消处理程序,但没有成功。上一个处理程序仍将运行

2 个答案:

答案 0 :(得分:2)

所以也许尝试添加你在runnable中检查的标志

boolean flag=true;

Runnable wait4TO = new Runnable(){
    @Override
    public void run() {
 if(!flag)
 return;
        if(pressedButton==INACTVE) ;
        // if reply is recieved pressedbutton will be INACTIVE

        else
        {
            sentFailed();
        }

    }
};

handler.postDelayed(wait4TO, 7000 );

当你想要停用它时你只需将flag设置为false;

最后尝试

  

handler.removeCallbacs(wait4TO);

答案 1 :(得分:2)

removeCallbacks有效。只要知道每个处理程序作为自己的队列,并在您的情况下,实现您想要的事实,您只需要一个Handler实例。