3

カウントダウンタイマーを継続的にループする方法はありますか? 60 秒経過してからテキスト フィールドを更新する基本的なタイマーがあり、機能していますが、機能を追加したいと思います: カウントダウンすると、ユーザーがキャンセルするまで自動的に再起動しますか? たぶん、スレッドを介して実行しますか?それを処理する方法がわからない。これが私が持っているものです。繰り返しますが、このコードは機能しますが、カウントダウンタイマーを停止して開始することしかできず、連続ループを実行することはできません:

cdt = new CountDownTimer(60000,1000) {
    public void onTick(long millisUntilFinished) { 
        tvTimer.setText("remaining : " + millisUntilFinished/1000 + " secs");
    }
     public void onFinish() { 
       tvTimer.setText("");
       bell.start(); 
     }
 };

 /***************On Click/Touch Listeners*******************/
 btnNext.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
        tvTimer.setText("");
        btnStart.setText("Start Timer");
        SetImageView2(myDbHelper); 
        cdt.cancel(); 

       }
    });

    btnStart.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
        if (!TimerTicking){ 
          cdt.start();
          btnStart.setText("Stop Timer");
        }
        else { 
            tvTimer.setText("");
            cdt.cancel();
            btnStart.setText("Start Timer");

        }
       }
    });
4

2 に答える 2

6

CountDownTimer をループする非常に基本的な方法の 1 つは、 を呼び出すstart()ことですonFinished()

public void onFinish() {
    ...
    start();  // Start this timer over
}

(これを行うときは、必ず CountDownTimer をキャンセルしてください。onPause()そうしないと、タイマーがリークしてバックグラウンドで起動し続ける可能性があります...おっと。)

ただし、CountDownTimers には根本的な欠陥があります (私の意見では)。最後の呼び出しをスキップすることが多く、呼び出されるonTick()たびに数ミリ秒かかります... :(前の質問onTick()で CountDownTimer を書き直して、より正確にし、すべてのティックを呼び出します.

于 2012-11-17T02:42:26.283 に答える