写个本地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的时候调用一下,释放资源


1157

被折叠的 条评论
为什么被折叠?



