我使用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)
取消处理程序,但没有成功。上一个处理程序仍将运行
答案 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实例。