This question already has answers here:
How to change/reset handler post delayed time?
                                
                                    (2个答案)
                                
                        
                2年前关闭。
            
        

@Override
public void onUserInteraction() {
    Handler handler = new Handler();
    handler.postDelayed(new Runnable () {
        public void run() {
            finish();
        }
    }, 5000);
    handler.removeCallbacks(null);
}


我正在尝试在调用OnCreate方法时运行处理程序。然后,我想取消处理程序并在收到用户交互时再次调用它(重新启动处理程序)。

我该怎么做?

提前致谢

最佳答案

您可以使用布尔对象,例如:

@Override
public void onUserInteraction() {
    isStarted = true;
    Handler handler = new Handler();
    handler.postDelayed(new Runnable () {
        public void run() {
          if(isStarted){
            finish();
            }
         }
    }, 5000);


}

或者你可以做这样的事情:

Runnable myRunnable = new Runnable() {
    @Override
    public void run() {
        finish();
    }
};

public static Handler myHandler = new Handler();
private static final int TIME_TO_WAIT = 5000;

@Override
public void onUserInteraction() {
    restart();
}

public void start() {
    myHandler.postDelayed(myRunnable, TIME_TO_WAIT);
}

public void stop() {
    myHandler.removeCallbacks(myRunnable);
}

public void restart() {
    myHandler.removeCallbacks(myRunnable);
    myHandler.postDelayed(myRunnable, TIME_TO_WAIT);
}

10-07 19:35
查看更多