我想完成以下任务:
if (already wait for 3 seconds) {
// do the task
} else {
// keep waiting ...
if (user tap the UI widget) {
return; // do nothing
}
}
首先,我想使用处理程序,使用sendMessageDelayed
(消息消息,long delayMillis)将消息排入消息队列之后(当前时间+ delayMillis)之后的所有待处理消息。当用户点击时,我removeMessages
(int what)。但它不起作用。
有人知道如何实现这个目标吗?感谢。
=============================================== =========
谢谢大家。
我发现这个解决方案效果很好,我太粗心了,不能使用错误的Handler引用removeMessages
,所以,它没有用。
答案 0 :(得分:1)
我更喜欢使用普通的旧Java API ScheduledExecutorService和ScheduledFuture:
// This schedule a runnable task in 3 seconds:
ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(1);
ScheduledFuture scheduledFuture = scheduledExecutorService.schedule(new Runnable() {
public void run() {
doSomethingUseful();
}
}, 3, TimeUnit.SECONDS);
... ...
// some times later if user tap the screen:
if (user tap the UI widget) {
if (!scheduledFuture.isDone())
scheduledFuture.cancel(true);
}
希望这有帮助。
答案 1 :(得分:0)
您可以在用户点按时设置标记,并在收到处理程序消息时检查该标记。
你也可以使用Timer,安排TimerTask,并在用户点击时取消任务。