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(何を)します。しかし、それは機能しません。

誰かがこれを達成する方法を知っていますか?ありがとう。

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

皆さんありがとう。

私はこの解決策がうまく機能することを発見しました、私はあまりにも不注意で、への間違ったハンドラー参照を使用するremoveMessagesことができなかったので、それは機能しませんでした。

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

ユーザーがタップしたときにフラグを設定し、ハンドラー メッセージを受信したときにそのフラグを確認できます。

タイマーを使用して、TimerTask をスケジュールし、ユーザーがタップしたときにタスクをキャンセルすることもできます。

于 2012-07-01T15:51:27.147 に答える