/**
* 在控件上显示倒计时
* @param countDownTime 全部的倒计时时间(单位:s)
* @param interval 更新间隔(单位:s)
* @param listenerCountDownTimerFinish 监听事件
* return countDownTimer 在倒计时没有关闭的时候可以取消倒计时
* */
public static android.os.CountDownTimer startTimer(int countDownTime,
int interval,
final ListenerCountDownTimerFinish listenerCountDownTimerFinish)
{
android.os.CountDownTimer countDownTimer = null;
// 由于CountDownTimer并不是准确计时,在onTick方法调用的时候,time会有1-10ms左右的误差,这会导致最后一秒不会调用onTick()
// 因此,设置间隔的时候,默认减去了10ms,从而减去误差。
// 经过以上的微调,最后一秒的显示时间会由于10ms延迟的积累,导致显示时间比1s长max*10ms的时间,其他时间的显示正常,总时间正常
countDownTimer = new android.os.CountDownTimer(countDownTime * 1000, interval * 1000 - 10) {
long timeInt ;
@Override
public void onTick(long time) {
// 第一次调用会有1-10ms的误差,因此需要+15ms,防止第一个数不显示,第二个数显示2s
timeInt = (time + 15) / 1000;
if(listenerCountDownTimerFinish != null){
listenerCountDownTimerFinish.onTick(timeInt);
}
}
@Override
public void onFinish() {
if(listenerCountDownTimerFinish != null){
listenerCountDownTimerFinish.onFinish();
}
}
};
if(countDownTimer != null){
countDownTimer.start();
}
return countDownTimer;
}
对于太多的不确定需求,其实核心代码已封装,用接口能够最大限度的扩展,不至于有新的需求去改代码,接口只暴露方法,最大限度的提高了扩展和复用,最后把countDownTimer 返回,方便页面关闭,倒计时没结束,可以在onDestory(); countDownTimer.cancl();取消,防止内存泄漏
上面是最后封装的代码,传入的接口,在countDownTimer 的onTick()方法里写上 listenerCountDownTimerFinish.onFinish();在countDownTimer 的onFinish()方法里写上 listenerCountDownTimerFinish.onFinish(); 然后调用哪里,哪里实现就会有这两个方法,比较方便.
在Activity 直接调用即可,下面是调用的示例代码:
PublicMethodUtil.startTimer(4, 1, new ListenerCountDownTimerFinish() {
@Override
public void onTick(long second) {
showCountDownTime = second + "s后自动跳转";
tv_time.setText(showCountDownTime);
}
@Override
public void onFinish() {
Intent intent = new Intent(ActivityPayWaitResult.this, ActivityOrderLists.class);
intent.putExtra("person_status", AppConstant.ORDER_BUYER);
startActivity(intent);
if (tourdiy_group_id > 0) {
//拼团详情h5
String[] configHost = getResources().getStringArray(R.array.site_url);
Intent intent_more = new Intent(ActivityPayWaitResult.this, WebViewActivity.class);
intent_more.putExtra("url","http://"+configHost[0]+"/index.php?app=wap&mod=MallTourdiy&act=group&group_id="+tourdiy_group_id);
intent_more.putExtra("type","token_url");
intent_more.putExtra("api_version",true);
startActivity(intent_more);
}
finish();
}
});
作者:郝金刚