等待N秒做某事,用户点击此期间,取消它

时间:2012-07-01 15:45:14

标签: android

我想完成以下任务:

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,所以,它没有用。

2 个答案:

答案 0 :(得分:1)

我更喜欢使用普通的旧Java API ScheduledExecutorServiceScheduledFuture

// 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,并在用户点击时取消任务。