实现一个小功能,用户指定时间未操作界面,提示超时并跳转到登录界面
,在DispatchOnTachEvent中调用方法,如:
public boolean dispatchTouchEvent(MotionEvent ev) {
resetTime();
return super.dispatchTouchEvent(ev);
}
/**
* 规定时间内没操作,就超时登录
*/
public void resetTime() {
if (timer2 != null) {
timer2.cancel();
timer2 = null;
}
timer2 = new CountDownTimer(10000, 10000) {
@Override
public void onTick(long millisUntilFinished) {
}
@Override
public void onFinish() {
if (isLogView) {
//跳转到登录界面
LoginActivity.statAction(BaseActivity.this, "TIMEOUT");
finish();
}
}
};
timer2.start();
结果发现不对,即使我在规定的时间了,多次操作了界面,只要到了60s铁跌跳转!
只能一个解释,cancel并没有成功,计时器仍然在运作.然而,在5.0及以上的系统中,cancel方法就可以起到作用。对比CountDownTimer的源码发现,在5.0中,增加了一个字段:
private boolean mCancelled = false;
通过mCancelled 标识当前计时器是否取消,然后在handleMessage()中首先对mCancelled进行判断:
SB图2
因此解决方式为自定义一个CountDownTimerUtil,将5.0以上的CountDownTimer源码复制到项目中即可。
下载地址: 5.0 CountDownTimer 源码
如果各位觉得有用,请点个赞以示鼓励,谢谢!