Question

Mon problème est que je dois envoyer des messages avec un retard de 1 seconde. Le gestionnaire initie alors une action, vous obtenez l'image.

Il existe néanmoins des conditions dans lesquelles il faut supprimer le message déjà envoyé (avant la deuxième écoulée) pour empêcher le gestionnaire de faire quoi que ce soit. Je ne pouvais pas comprendre comment faire (ou s'il est encore possible), donc si quelqu'un d'entre vous a une idée, s'il vous plaît laissez-moi savoir ..

Était-ce utile?

La solution

Il n'y a rien d'effrayant sur les méthodes de removeMessages(); ils sont parfaitement sûrs. Le cadre repose en grande partie sur ces méthodes et ils sont utilisés dans de nombreux de nombreux endroits, en particulier dans les widgets par défaut (View, ListView, etc.) Il est beaucoup mieux que la construction d'un Handler qui ne tient pas compte des messages spécifiques. Ceci est la programmation, ne va pas avec vos sentiments: p

Autres conseils

De nombreux développeurs et une grande partie du code source, vous trouverez montrera les gens qui passent des fonctions anonymes à un gestionnaire, donc je pense que dans certains cas, vous pouvez être sûr comment supprimer. Une solution simple est de déclarer votre runnable comme vous le feriez pour tout autre objet, et de garder un pointeur vers ce qui peut être utilisé pour effacer toute instance de de la file Handler.

private Runnable lastMyRunnablePtr = null;

...

private class MyRunnable implements Runnable
{}

....

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

....

protected void onDestroy() {
  mHandler.removeCallbacks(lastMyRunnablePtr);
}

En fait, vous devriez envisager la mise en œuvre de handler.removeMessages(int, obj). Si l'obj est un objet lié à autoboxing, vous rencontrerez un problème de la mise en œuvre d'Android MessageQueue.

Pour la suite extrait de code, les removeMessages ne fonctionnera pas en raison de l'auto-boxing, conversion de la boxe et le MessageQueue de l'aide Implémentation p.obj == objet à comparer objet.

Message msg = handler.obtainMessage(what, 256);
handler.sendMessageDelayed(message, delayMillis);
handler.removeMessages(what, 256);

.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top