CountDownTimer cancle无效


实现一个小功能,用户指定时间未操作界面,提示超时并跳转到登录界面

,在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进行判断:

CountDownTimer cancle无效_第1张图片
SB图2

因此解决方式为自定义一个CountDownTimerUtil,将5.0以上的CountDownTimer源码复制到项目中即可。

下载地址: 5.0 CountDownTimer 源码

如果各位觉得有用,请点个赞以示鼓励,谢谢!

CountDownTimer cancle无效_第2张图片
欢迎搞基

你可能感兴趣的:(CountDownTimer cancle无效)