簡體   English   中英

如何在CountDownTimer內定期調用方法?

[英]How can I call a method at regular intervals inside of a CountDownTimer?

我的代碼做什么:我的活動有一個CountDownTimer ,它在用戶按下按鈕時啟動。 完成后,將播放聲音。 這是代碼:

public class PrepTimer extends CountDownTimer {
    public PrepTimer(long millisInFuture, long countDownInterval) {
        super(millisInFuture, countDownInterval);
    }

    @Override
    public void onTick(long millisUntilFinished) {
        updateSessionRemaining(millisUntilFinished);
        setPrepDigits(millisUntilFinished);
    }

    @Override
    public void onFinish() {
        session.setPrepRemaining(0);
        playSound();
    }
}

我想要做的是:我希望聲音在計時器的過程中定期播放(除了結束時)。 例如,在十分鍾的計時器中,聲音可能每60秒播放一次。

我嘗試過的事情:

  • onTick方法內使用if語句檢查millisUntilFinished是否等於某個值(例如60秒的倍數),然后運行該方法。 這似乎是最直接的解決方案,但我發現該方法未持續觸發(也許millisUntilFinished跳過了我要檢查的值?)。
  • 創建單獨的嵌套CountDownTimers並使用for循環重復。 問題是代碼很快變得過於復雜,我的直覺告訴我,我不應該在計時器中運行計時器。

問題:如何在CountDownTimer的過程中定期運行方法?

不用使用倒數計時器,您可以簡單地使用延遲發布的處理程序和線程。在方法的末尾以指定的時間間隔發布處理程序,如下代碼

Runnable myThread = new Runnable() {
    @Override
    public void run() {
        //call the method here
        myHandler.postDelayed(myThread, 1000);//calls thread after 60 seconds
    }
};
myHandler.post(myThread);//calls the thread for the first time

在考慮了一段時間之后,我想出了一個滿足我對簡單性的主要要求的解決方案。 使用方法如下:

聲明兩個類級別的變量

private long startTime = 60000; // Set this equal to the length of the CountDownTimer
private long interval = 10000; // This will make the method run every 10 seconds  

聲明一種在CountDownTimer內部的間隔上運行的方法

private void runOnInterval(long millisUntilFinished) {
    if (millisUntilFinished < startTime) {
        playSound();
        startTime -= interval;
    }
}

然后在CountDownTimeronTick方法中調用該方法

// ...
@Override
    public void onTick(long millisUntilFinished) {
        runOnInterval(millisUntilFinished);
    }
// ...

這是它的工作方式: CountDownTimeronTick方法每次計時都會傳遞millisUntilFinished 然后, runOnInterval()檢查該值是否小於startTime 如果是這樣,它將在if語句(在我的情況下為playSound() )中運行代碼,然后將interval的值減少startTime 一旦millisUntilFinished小於startTime ,該過程將重新開始。

上面的代碼比采用另一個CountDownTimerHandlerRunnable更簡單。 它還可以自動與可能已添加到活動中以處理CountDownTimer暫停和重置的任何功能結合使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM