利用CountDownTimer很方便的实现倒计时功能,每隔一段时间就会调用onTick方法,有些时候想在onTick方法里条件判断是否停止计时,能想到的就是调用cancel方法,以为这样就行了,但很遗憾,它就是没有作用,网上资料说在5.0及以上系统cancel方法就可以起作用,因此,可以自定义CountDownTimer,把5.0以上的CountDownTimer源码复制进去就可以了,我试了一下,轻松解决了。后来发现了更好的解决方法,既然在onTick中调用无效,何不在onTick方法中发送消息在外面cancel呢,一试还真行了:
/* 定义一个倒计时的内部类 */
class TimeCount extends CountDownTimer {
public TimeCount(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);
}
@Override
public void onFinish() {//计时完毕时触发
}
@Override
public void onTick(long millisUntilFinished){//计时过程显示
if((millisUntilFinished/1000)%30==0){//等于30秒就关闭
//LogUtil.showE(LogUtil.Cai,"关闭");
mHandler.sendEmptyMessage(0);
}
}
}
Handler mHandler = new Handler()
{
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
if (timeCount!=null) {
timeCount.cancel();
}
}
};