一个短信验证码计时工具 实现了button的文字显示以及enable的改变,其中缓存工具用的是ACache,可以随意替换 public class CodeTimeUtil { private final String SMS_CODE_KEY = "smsCodeKey"; private int second;
public class CodeTimeUtil { private final String SMS_CODE_KEY = "smsCodeKey"; private int second; private Timer timer; private TimerTask timerTask; private Handler handler; private static CodeTimeUtil instance; public static CodeTimeUtil getInstance(){ if (instance == null) instance = new CodeTimeUtil(); return instance; } private CodeTimeUtil() { } public void startSmsCode(final Button view, boolean isStartNow){ handler = new Handler(){ @Override public void handleMessage(Message msg) { if (view == null){ return; } view.setText("已发送("+msg.what+"秒)"); if (msg.what > 0) { view.setEnabled(false); } else { view.setEnabled(true); view.setText("获取短信验证码"); } } }; try { long cacheTime = Long.parseLong(ACache.get(App.INSTANCE).getAsString(SMS_CODE_KEY)); if (cacheTime != 0 && System.currentTimeMillis() - cacheTime < 60*1000 ){ startTime((int) (60 - ((System.currentTimeMillis() - cacheTime) /1000))); return; } }catch (Exception e){ Log.e("CodeTime","code Timer error"); } if (isStartNow) { ACache.get(App.INSTANCE).put(SMS_CODE_KEY, System.currentTimeMillis() + ""); if (view != null) startTime(60); } } private void startTime(int s){ stopTimer(); second = s; timer = new Timer(); timerTask = new TimerTask() { @Override public void run() { if (second == 0) { cancel(); return; } second--; handler.sendEmptyMessage(second); } }; timer.schedule(timerTask,0,1000); } public void stopTimer(){ if (timer != null) { timerTask = null; timer.cancel(); } } public void removeCacheTime(){ if ( ACache.get(App.INSTANCE).getAsString(SMS_CODE_KEY) != null) ACache.get(App.INSTANCE).remove(SMS_CODE_KEY); stopTimer(); } }