import android.os.Handler;
import android.os.Looper;
import java.util.Timer;
import java.util.TimerTask;
/**
* 倒计时
*/
public class CountDownUtils {
public static volatile CountDownUtils utils;
private Handler handler;//子线程转换至主线程
public int times = 0;
public Timer timer;
private CountDownListener listener;
private MyTimerTask timerTask;
/**
* 设置倒计时
* @param times 时间(秒)
* @return CountDownUtils
*/
public CountDownUtils setTimes(int times) {
this.times = times;
return this;
}
public static CountDownUtils getUtils() {
if (utils == null) {
synchronized (CountDownUtils.class) {
if (utils == null) {
utils = new CountDownUtils();
}
}
}
return utils;
}
public CountDownUtils() {
handler = new Handler(Looper.getMainLooper());
}
public void startCountDown(CountDownListener listener) {
this.listener = listener;
timer = new Timer();
timerTask = new MyTimerTask();
timer.schedule(timerTask, 0, 1000);
}
private class MyTimerTask extends TimerTask {
@Override
public void run() {
if (times < 0) {
stopCountDown();
complete();
} else {
onDowning(times);
times--;
}
}
}
/**
* 停止倒计时
*/
public void stopCountDown() {
TsLogUtils.e("stopCountDown");
times = 0;
try {
if (timerTask != null) {
timerTask.cancel();
timerTask = null;
}
if (timer != null) {
timer.cancel();
timer.purge();
timer = null;
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 开始倒计时
*
* @param progress 倒计时
*/
private void onDowning(int progress) {
handler.post(() -> listener.onDowning(progress));
}
/**
* 倒计时完成
*/
private void complete() {
TsLogUtils.e("未被销毁被调用=======================complete");
handler.post(() -> listener.complete());
}
public interface CountDownListener {
void onDowning(int progress);
void complete();
}
}
//使用方法
//开始倒计时
CountDownUtils.getUtils().setTimes(15)
.startCountDown(new CountDownUtils.CountDownListener() {
@Override
public void onDowning(int progress) {
}
@Override
public void complete() {
}
});
//停止倒计时
CountDownUtils.getUtils().stopCountDown();