9

好的,我需要在倒计时时创建一个无限循环。我的代码是:

public void countdown() {
    if (x != null) {
        x.cancel();
    }

    x = new CountDownTimer(20000, 1000) {
        public void onTick(long millisUntilFinished) {
        }

        public void onFinish() {
            showNotification();
        }
    };
    x.start();
}

x 只是一个静态倒计时变量。问题是我尝试了很多方法来使上面的代码工作,我的意思是当倒计时结束时,它会显示那个通知,它应该重新开始等等......但我找不到办法做到这一点.

4

8 回答 8

16

希望这会帮助你。

public void countdown(){
    if (x != null) {
        x.cancel();
    }
    x = new CountDownTimer(20000, 1000) {
       public void onTick(long millisUntilFinished) {
        }
       public void onFinish() {
           showNotification();
            x.start();
        }
    };
 }
于 2011-11-26T11:23:13.407 回答
9

为记录CountDownTimer( long millisInFuture, long countDownInterval)

  // A not so infinite but close to infinte interval for each second
  CountDownTimer cdt=new CountDownTimer(Long.MAX_VALUE, 1000) { .... }

其中 Long.MAX_VALUE = 9223372036854775807 毫秒或大约 2.92 亿年(或多或少的秒数)

它不是无限的,但它非常长。

于 2017-06-12T22:39:04.893 回答
5

是在他完成后重新启动你的计时器:) 像这样:

   x = new CountDownTimer(20000, 1000) {
            public void onTick(long millisUntilFinished) {
            }

            public void onFinish() {
                showNotification();
                start();// here, when your CountDownTimer has finished , we start it again :)
            }
        };
        x.start();
于 2011-11-26T11:58:16.080 回答
4

创建无限循环的简单方法:

每一秒调用方法

new CountDownTimer(1000, 1000) 
   {
        public void onTick(long l) {}
        public void onFinish() 
        {
          //Code hear
          start();
        }
    }.start();
于 2018-03-30T13:28:31.823 回答
3

为什么不只使用常规计时器?它会以指定的时间间隔重复,直到您调用 cancel(),例如:

public void countdown() { 
    if (x != null) {
        x.cancel();
    }

    x = new Timer("timerName");
    x.schedule(_timerTask, 0, 20000);
}

private static final TimerTask _timerTask = new TimerTask() {
    @Override
    public void run() {
        showNotification();
    }
};
于 2011-11-26T13:43:58.313 回答
1

让你的计时器正常工作

<countdowntime>.start(); 

onfinish街区

于 2013-07-09T14:07:43.660 回答
1

你可以只使用一个while循环: 当它完成“事情”时,它会重新开始,无限!
while (true) {
// do stuff
}

于 2011-11-26T11:20:45.970 回答
0

好吧,我已经实现了一个无限定时器,它接收多个监听器并在特定的时间间隔内同时调用它们。

import android.os.CountDownTimer;
import java.util.Arrays;

public class InfiniteCounter extends CountDownTimer {

    private static final int MAX_LISTENERS = 100;

    private static InfiniteCounter timer;
    private static InfiniteCounterListener[] listenerList = new InfiniteCounterListener[MAX_LISTENERS];

    private InfiniteCounter(long millisInFuture, long countDownInterval) {
        super(millisInFuture, countDownInterval);
    }

    //Milliseconds Intervals in which the counter should call its listeners 
    public static InfiniteCounter initInstance(int intervalMillis) {
        removeAllListeners();
        if (timer == null) {
            timer = new InfiniteCounter(60 * 60 * 1000, intervalMillis);
            timer.start();
        }
        return timer;
    }

    public static void attachListener(InfiniteCounterListener listener) {
        for (int i = 0; i < MAX_LISTENERS; i++) {
            if (listenerList[i] == null) {
                listenerList[i] = listener;
                break;
            }
        }
    }

    public static void removeListener(InfiniteCounterListener listener) {
        for (int i = 0; i < MAX_LISTENERS; i++) {
            if (listenerList[i] == listener) {
                listenerList[i] = null;
                break;
            }
        }
    }

    private static void removeAllListeners() {
        Arrays.fill(listenerList, null);
    }

    public static void stopTimer() {
        removeAllListeners();
        if (timer != null) timer.cancel();
        timer = null;
    }

    @Override
    public void onTick(long l) {
        for (int i = 0; i < MAX_LISTENERS; i++) {
            if (listenerList[i] != null) listenerList[i].onTick();
        }
    }

    @Override
    public void onFinish() {
        timer.start();
    }

    public interface InfiniteCounterListener {
        void onTick();
    }
}

只需将侦听器附加到此类并使用单个计时器,它就可以调用多个侦听器——这使得性能非常优化。

于 2021-09-28T19:43:32.960 回答