Timer.cancel()无效。Android长按按钮一定时间执行某个操作。

来源:互联网 发布:fq软件是什么 编辑:程序博客网 时间:2024/05/29 09:40

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

0 0
原创粉丝点击