12

私の問題は、1 秒の遅延でメッセージを送信する必要があることです。次に、ハンドラーが何らかのアクションを開始します。これで画像が得られます。

それにもかかわらず、ハンドラーが何もしないようにするために、既に送信されたメッセージを (2 番目が経過する前に) 削除する必要があるいくつかの条件があります。これを行う方法がわかりませんでした(またはそれが可能かどうかさえも)ので、誰か手がかりがあれば教えてください..

4

3 に答える 3

36

removeMessages()メソッドに怖いものは何もありません。彼らは完全に安全です。フレームワークはこれらのメソッドに大きく依存しており、多くの場所、特にデフォルトのウィジェット ( View、など) で使用されています。特定のメッセージを無視する をListView構築するよりもはるかに優れています。Handlerこれはプログラミングです。自分の気持ちに惑わされないでください :p

于 2009-12-28T18:15:49.137 に答える
6

多くの開発者とあなたが見つけるソースコードの多くは、無名関数をハンドラーに渡す人々を示しているので、場合によっては、これらを削除する方法がわからないかもしれないと思います。簡単な解決策は、他のオブジェクトと同じように実行可能オブジェクトを宣言し、ハンドラーキューからそのインスタンスをクリアするために使用できるオブジェクトへのポインターを保持することです。

private Runnable lastMyRunnablePtr = null;

..。

private class MyRunnable implements Runnable
{}

...。

lastMyRunnablePtr = new MyRunnable();
mHandler.postDelayed(lastMyRunnablePtr ,30000);

...。

protected void onDestroy() {
  mHandler.removeCallbacks(lastMyRunnablePtr);
}
于 2011-08-02T09:08:22.003 に答える