有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java停止前一个处理程序postdelayed并启动新处理程序

我正在使用HandlerpostDelayed()启动计时器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) 个答案

  1. # 1 楼答案

    所以,也许可以尝试添加您签入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);

  2. # 2 楼答案

    removeCallbacks有效。请注意,每个处理程序都是自己的队列,在您的情况下,为了实现您想要的,您只需要一个处理程序实例