Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Handler#removeCallbacksAndMessages无法正常工作_Java_Android_Runnable_Android Handler_Postdelayed - Fatal编程技术网

Java Handler#removeCallbacksAndMessages无法正常工作

Java Handler#removeCallbacksAndMessages无法正常工作,java,android,runnable,android-handler,postdelayed,Java,Android,Runnable,Android Handler,Postdelayed,我创建了一个h.postdelayed,如果条件为真,我想取消它。 我编写了if条件,并在其中执行了h.removecallbacksandsessages(null)。但是,我可以看到“计时器”仍在运行。有什么帮助吗 h.postDelayed(new Runnable() { public void run() { timePassed++; timeLeft = (maxTime - timePassed) / 10; timeLeftStr = "Time l

我创建了一个h.postdelayed,如果条件为真,我想取消它。 我编写了if条件,并在其中执行了h.removecallbacksandsessages(null)。但是,我可以看到“计时器”仍在运行。有什么帮助吗

h.postDelayed(new Runnable() {
  public void run() {
    timePassed++;
    timeLeft = (maxTime - timePassed) / 10;
    timeLeftStr = "Time left: " + timeLeft + " seconds";
    timer.setText(timeLeftStr);

    if (timeLeft <= 0) {
      started = false;

      h.removeCallbacksAndMessages(null);

      setupGameOver(restartBtn, header1, header2, timer);
    }

    h.postDelayed(this, 100);
  }
}, 100);
h.postDelayed(新的Runnable(){
公开募捐{
timePassed++;
timeLeft=(maxTime-timePassed)/10;
timeLeftStr=“剩余时间:”+timeLeft+“秒”;
timer.setText(timeLeftStr);

如果(timeLeft如果不想再次运行,请不要延迟

h.postDelayed(new Runnable() {
    public void run() {
        timePassed++;
        timeLeft = (maxTime - timePassed) / 10;
        timeLeftStr = "Time left: " + timeLeft + " seconds";
        timer.setText(timeLeftStr);

        if (timeLeft <= 0) {
            started = false;

            h.removeCallbacksAndMessages(null);

            setupGameOver(restartBtn, header1, header2, timer);
        } else {
            // run again.
            h.postDelayed(this, 100);
        }

    }
}, 100);
h.postDelayed(新的Runnable(){
公开募捐{
timePassed++;
timeLeft=(maxTime-timePassed)/10;
timeLeftStr=“剩余时间:”+timeLeft+“秒”;
timer.setText(timeLeftStr);

如果(timeLeft)相同的方式:如果不想再次运行,请不要删除CallbacksandMessages-您没有任何“挂起”
Runnable
所以没有什么可以删除的是。我假设@Freeline还有其他的runnables循环也需要停止,所以我保留了
removecallbacksandsessages
方法,以便继续运行。感谢您的快速回答。所以postdelayed是它再次运行的原因。我不知道,只是在谷歌上搜索了如何恢复o每隔x秒运行一次,这就是出现的。我没有任何其他可运行的程序,因此我可以删除“removeCallbacksAndMessages”?下次我有机会时将尝试此操作,并将其标记为正确,如果它有效。尽管如此。再次感谢。@FreeLine很好,很高兴我的回答帮助了你。你能接受它为“the”回答你的问题吗?@petey如果有效,我会将其标记为正确,但我还没有机会尝试。