1. 程式人生 > 其它 >java 秒錶暫停_Java/Android計時器(開始,暫停,恢復,停止)

java 秒錶暫停_Java/Android計時器(開始,暫停,恢復,停止)

由於要做暫停和恢復,這裡我就沒有使用Android的CountDownTimer,而是用了Java的Timer。所以,這個方法在java肯定是通用。我也外加了Android獨有的Service,有些計時器需要在Activiy關閉的情況下依然在計時,回到Activity時,顯示當前的計時狀態。

Timer 這個Java的類,具體看Java的API說明,但是要注意一點:

Timer 在cancel後,需要重新new 一次。

首先要給計時器定義三個狀態:準備,開始,暫停。

public static final int PREPARE = 0;

public static final int START = 1;

public static final int PASUSE = 2;

1.準備:沒有開始計時,最初始狀態;

2.開始:已經開始倒計時

3.暫停:已經開始倒計時,而且使用者點選了暫停

開始、恢復倒計時,我定義了這個方法:

/**

* start count down

*/

private void startTimer(){

timer = new Timer();

timerTask = new MyTimerTask();

timer.scheduleAtFixedRate(timerTask, 0, timer_unit);

}

timer_unit 就是執行timer 任務的時間,我定義為1秒。MyTimerTask是我定義的一個倒計時計算方法,如下:

/**

* count down task

*/

private class MyTimerTask extends TimerTask{

@Override

public void run() {

timer_couting -=timer_unit;

if(timer_couting==0){

cancel();

initTimerStatus();

}

mHandler.sendEmptyMessage(1);

}

}timer_couting 是一個變數,記錄當前倒計時還剩餘多少時間,當剩餘時間為0時,倒計時結束,所以cancel結束倒計時。每次倒計一秒通過handler傳送到主執行緒來更新ui提示倒計時資訊。

在介面上定義兩個按鈕,一個開始,一個停止,開始後可以暫停,暫停後可以恢復。

case R.id.btn_start:

switch (timerStatus){

case CountDownTimerUtil.PREPARE:

startTimer();

timerStatus = CountDownTimerUtil.START;

btnStart.setText("PAUSE");

break;

case CountDownTimerUtil.START:

timer.cancel();

timerStatus = CountDownTimerUtil.PASUSE;

btnStart.setText("RESUME");

break;

case CountDownTimerUtil.PASUSE:

startTimer();

timerStatus = CountDownTimerUtil.START;

btnStart.setText("PAUSE");

break;

}

break;

case R.id.btn_stop:

if(timer!=null){

timer.cancel();

initTimerStatus();

mHandler.sendEmptyMessage(1);

}

對於Android應用中需要用到關閉了Activity後依然在計時,在這裡我們需要用Service,定義Service的情況跟上面類同,但是要注意的是這個計時Service是要單例模式,保證每次倒計時進來都是同一個倒計時。還需要定義一些方法來讓Activity給這個Service傳遞操作命令,開始,暫停,恢復,停止。

/**

* start

*/

public void startCountDown(){

startTimer();

timerStatus = CountDownTimerUtil.START;

}

/**

* paust

*/

public void pauseCountDown(){

timer.cancel();

timerStatus = CountDownTimerUtil.PASUSE;

}

/**

* stop

*/

public void stopCountDown(){

if(timer!=null){

timer.cancel();

initTimerStatus();

mCountDownTimerListener.onChange();

}

}在Activity裡面獲取這個Service

countDownTimerService = CountDownTimerService.getInstance(new MyCountDownLisener()

,service_distination_total);

專案原始碼:https://github.com/arjinmc/Android-CountDownTimer

原文連結:https://blog.csdn.net/weixin_35652131/article/details/114254624

搜尋

複製