您的位置:首页 > 移动开发 > Android开发

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

2017-04-13 12:59 561 查看
在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;
}
}
);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐