1. 程式人生 > >Timer.cancel()無效。Android長按按鈕一定時間執行某個操作。

Timer.cancel()無效。Android長按按鈕一定時間執行某個操作。

在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; } } ); }