Timer.cancel()無效。Android長按按鈕一定時間執行某個操作。
阿新 • • 發佈:2018-12-31
在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要想停止任務可以使timerTask 取消* from taking place, {@code false} otherwise. */ public boolean cancel() { synchronized (lock) { boolean willRun = !cancelled && when > 0; cancelled = true; return willRun; } }
eg:
llBlank.setOnTouchListener(new View.OnTouchListener() { privateTimerTask task; private Timer mTimer; @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: mTimer = newTimer(); 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; } } ); }