1、工具类
/** * 作者:created by meixi * 邮箱:15913707499@163.com * 日期:2018/12/28 15 */ public class TimerUtil { private static final int nHandlerMsg = 23566124; private int nStartDelayTime; private int nIntervalTime; private Timer mTimer; private TimerTask mTimeTask; private Handler mHandler; private OnTimerChangeListener onTimerChangeListener; public TimerUtil(int nStartDelayTime, int nIntervalTime, OnTimerChangeListener onTimerChangeListener) { this.nStartDelayTime = nStartDelayTime; this.nIntervalTime = nIntervalTime; this.onTimerChangeListener = onTimerChangeListener; } /** * 计时器开始 */ public void timeStart() { timeStop(); mHandler = new TimeHandler(this); mTimeTask = new TimerTask() { @Override public void run() { if (mHandler != null) mHandler.obtainMessage(nHandlerMsg).sendToTarget(); } }; mTimer = new Timer(); mTimer.schedule(mTimeTask, nStartDelayTime, nIntervalTime); } /** * 停止计时器 */ public void timeStop() { if (mTimer != null) mTimer.cancel(); if (mTimeTask != null) mTimeTask.cancel(); mTimeTask = null; mHandler = null; mTimer = null; } private void doTimeChange() { if (onTimerChangeListener != null) onTimerChangeListener.doChange(); } private static class TimeHandler extends Handler { WeakReference<TimerUtil> weakReference; public TimeHandler(TimerUtil timerUtil) { weakReference = new WeakReference<>(timerUtil); } @Override public void handleMessage(Message msg) { TimerUtil timerUtil = weakReference.get(); if (msg.what == nHandlerMsg) timerUtil.doTimeChange(); super.handleMessage(msg); } } public interface OnTimerChangeListener { void doChange(); } }
2、实例化
private int mMin = 11; private TimerUtil timerUtil;
private void initTimerUtil() { TimerUtil.OnTimerChangeListener onTimerChangeListener = new TimerUtil.OnTimerChangeListener() { @Override public void doChange() { doTimeChange(); } }; timerUtil = new TimerUtil(0, 1000, onTimerChangeListener); } private void doTimeChange() { mMin--; if (mMin < 0) { mMin = 11; // timeStop();//如是周期倒计时,不停。一次性倒计时则,stop // activityExchangePhoneSendCode.setText("获取验证码"); Log.i("lgq","sss6666==ss="+mMin); return; } Log.i("lgq","sss6666==="+mMin); // activityExchangePhoneSendCode.setText(String.valueOf(mMin)+"秒后重发");//倒计时过程 } /** * 停止计时器 */ private void timeStop() { timerUtil.timeStop(); } /** * 计时器开始 */ private void timeStart() { timerUtil.timeStart(); }
3、调用开始
onCreate方法调用初始化
initTimerUtil(); 随时开启倒计时 timeStart();
时分秒倒计时
int ms,fs,ss; public void daojishi(String shi,String fen,String mian){ ss = Integer.parseInt(shi); fs = Integer.parseInt(fen); ms = Integer.parseInt(mian); //开始延时5秒,每次间隔12秒 Observable.interval(1, 1, TimeUnit.SECONDS).observeOn(AndroidSchedulers.mainThread()).subscribe(new Consumer<Long>() { @Override public void accept(Long aLong) { runOnUiThread(new Runnable() { @Override public void run() { // LgqLogPlus.e("倒计时。。。。"+ms); if (ms>0){ ms--; if (ms<10){ miaote.setText("0"+ms); }else { miaote.setText(ms+""); } }else if (ms==0){ if (fs>0){ if (ms==0){ ms=60; miaote.setText(ms+""); } } if (fs>0){ fs--; if (fs<10){ fente.setText("0"+fs); }else { fente.setText(fs+""); } }else if (fs==0){ if (ss>0){ if (fs==0){ fs=60; fente.setText(fs+""); } } if (ss>0){ ss--; fs=60; ms=60; if (ss<10){ shite.setText("0"+ss); }else { shite.setText(ss+""); } }else { shite.setText("00"); } } } } }); } }); }
方法2-------------------------------------------
private Handler handler = new Handler(Looper.getMainLooper()); private int CONNECT_INTERVAL = 300; private int iCurrConnTimes = 0;//当前进度 private int CONNECT_TIMES = 100;//30秒 =CONNECT_INTERVAL*CONNECT_TIMES boolean ifrun;
控制
handler.postDelayed(connectRunnable, CONNECT_INTERVAL); kaibt.setOnClickListener(v -> { ifrun=true; handler.postDelayed(connectRunnable, CONNECT_INTERVAL); }); guanbt.setOnClickListener(v -> { ifrun = false; });
运行
private Runnable connectRunnable = new Runnable() { @Override public void run() { iCurrConnTimes++; LgqLogPlus.d("倒计时==== "+iCurrConnTimes); tvProgress.setText(iCurrConnTimes+"%"); if (iCurrConnTimes < CONNECT_TIMES){ if (ifrun){ handler.postDelayed(connectRunnable, CONNECT_INTERVAL); } }else { handler.removeCallbacks(connectRunnable); } } }; @Override protected void onDestroy() { super.onDestroy(); handler.removeCallbacksAndMessages(null); }