将sms倒计时封装在一个类中:
public class SmsTimer {
private Timer timer;
private int totalTime=60; //总共时长
private int currentTime; //当前倒计时
private Handler handler=new Handler(Looper.getMainLooper());
public SmsTimer(TimerInterface timerInterface){
this.timerInterface=timerInterface;
}
public SmsTimer(int totalTime,TimerInterface timerInterface){
this.totalTime=totalTime;
this.timerInterface=timerInterface;
}
public void start(){
if(timer==null){
timer=new Timer();
currentTime=totalTime;
timer.schedule(new TimerTask() {
@Override
public void run() {
handler.post(runnable);
}
},1000,1000);
}
}
public boolean isStart(){
return timer!=null;
}
public void cancel(){
if(timer!=null){
timer.cancel();
timer=null;
}
handler.removeCallbacksAndMessages(null);
}
private TimerInterface timerInterface;
public interface TimerInterface{
void timerFinish();
void timerPlaying(int time);
}
private Runnable runnable=new Runnable() {
@Override
public void run() {
currentTime--;
//如果倒计时完成,结束timer,调用自定义接口方法
if(currentTime<=0){
if(timerInterface!=null)timerInterface.timerFinish();
cancel();
}else{
if(timerInterface!=null)timerInterface.timerPlaying(currentTime);
}
}
};
}
使用方法如下:
1.创建SmsTimer对象
SmsTimer smsTimer=new SmsTimer(new SmsTimer.TimerInterface() {
@Override
public void timerFinish() {
//倒计时完成时的回调
}
@Override
public void timerPlaying(int time) {
//倒计时进行时的回调
}
});
2.启动计时器
if(!smsTimer.isStart()){
smsTimer.start(); //开启短信倒计时
//...做自己的事
}
3.在Activity或Fragment的onDestroy中结束计时器,防止内存泄露
@Override
protected void onDestroy() {
super.onDestroy();
smsTimer.cancel();
}