在timer 中 timerTask执行过程中cancel是无效的。
查看源码:
/** * Cancels the {@code TimerTask} and removes it from the {@code Timer}'s queue. Generally, it * returns {@code false} if the call did not prevent a {@code TimerTask} from running at * least once. Subsequent calls have no effect. * * @return {@code true} if the call prevented a scheduled execution * from taking place, {@code false} otherwise. */ public boolean cancel() { synchronized (lock) { boolean willRun = !cancelled && when > 0; cancelled = true; return willRun; } }要想停止任务可以使timerTask 取消
eg:
llBlank.setOnTouchListener(new View.OnTouchListener() { private TimerTask task; private Timer mTimer; @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: mTimer = new Timer(); task = new TimerTask() { @Override public void run() { Message message = new Message(); Vibrator vib = (Vibrator) getApplicationContext().getSystemService(Service.VIBRATOR_SERVICE); long[] pattern = {0, 80}; if (rlAdvance.getVisibility() == View.GONE) { /**震动服务*/ vib.vibrate(pattern, 1); message.what = showAdvance; handler1.sendMessage(message); } } }; mTimer.schedule(task, 2000); break; case MotionEvent.ACTION_UP: mTimer.cancel(); task.cancel(); } return false; } } ); }