0

我想完成以下任务:

if (already wait for 3 seconds) {
    // do the task
} else {
    // keep waiting ...
    if (user tap the UI widget) {
        return; // do nothing
    }
}

首先,我想使用处理程序,使用sendMessageDelayed(Message msg, long delayMillis) 在之前的所有待处理消息之后将消息排入消息队列(当前时间 + delayMillis)。当用户点击时,我removeMessages(int what)。但它不起作用。

有谁知道如何实现这一目标?谢谢。

==================================================== ======

谢谢大家。

我发现这个解决方案效果很好,我太粗心了,removeMessages没有使用错误的 Handler 引用,所以它不起作用。

4

2 回答 2

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

希望这可以帮助。

于 2012-07-01T22:05:25.380 回答
0

您可以在用户点击时设置一个标志,并在收到处理程序消息时检查该标志。

您还可以使用 Timer,安排 TimerTask,并在用户点击时取消任务。

于 2012-07-01T15:51:27.147 回答