写个本地SharedPreferences存储的倒计时,只要app缓存没清掉,这个倒计时就是公用一个时间,下面的工具类代码
//注册 的短信倒计时工具类 public class SendSMSUtil { private TextView desc; private long time = 60000;//60S private SharedPreferences sp = MyApplication.context.getSharedPreferences("SendSMS", Context.MODE_PRIVATE); private SharedPreferences.Editor editor = sp.edit(); private CountDownTimer timer; public SendSMSUtil(TextView tv) { desc = tv; long oldTime = getOldTime(); if (oldTime > 1000) { desc.setEnabled(false); desc.setText("重新获取" + oldTime / 1000 + "S"); timer = new CountDownTimer(oldTime, 1000) { @Override public void onTick(long l) { desc.setEnabled(false); desc.setText("重新获取" + l / 1000 + "S"); } @Override public void onFinish() { desc.setEnabled(true); desc.setText("获取验证码"); } }; timer.start(); } else { desc.setEnabled(true); desc.setText("获取验证码"); } } //重置 倒记时 点击事件调用它 public void setTimer() { saveOldTime(System.currentTimeMillis() + time); timer = new CountDownTimer(time, 1000) { @Override public void onTick(long l) { desc.setEnabled(false); desc.setText("重新获取" + l / 1000 + "S"); } @Override public void onFinish() { desc.setEnabled(true); desc.setText("获取验证码"); } }; timer.start(); } private void saveOldTime(long l) { //直接保存到期时间 editor.putLong("time", l); editor.apply(); } private long getOldTime() {//获取剩余的倒记时间 long l = sp.getLong("time", 1); if (l < System.currentTimeMillis()) { return 0;//已经过完倒及时 } return l - System.currentTimeMillis(); } public void close() { if (timer != null) { timer.cancel(); } } } 先初始化工具类,传入需要改变字样的textView,然后在它的点击事件调用下面方法就可以了,工具类里面还有一个关闭倒计时的方法,可以才销毁activity的时候调用一下,释放资源