annuler un processus handler.postdelayed

J’utilise handler.postDelayed() pour créer une période d’attente avant la prochaine étape de mon application. Pendant la période d’attente, j’affiche une boîte de dialog avec la barre de progression et le bouton Annuler .

Mon problème est que je ne peux pas trouver un moyen d’ annuler la tâche post-retardée avant la fin du temps imparti.

Je le fais pour poster un runnable différé:

 myHandler.postDelayed(myRunnable, SPLASH_DISPLAY_LENGTH); 

Et ceci pour le supprimer: myHandler.removeCallbacks(myRunnable);

Si vous avez plusieurs exécutables internes / anonymes transmis au même gestionnaire, et que vous souhaitez annuler tout à la même utilisation d’événement

handler.removeCallbacksAndMessages(null);

Selon la documentation,

Supprimez tous les messages en attente de rappels et les messages envoyés dont l’object est un jeton. Si le jeton est nul, tous les rappels et messages seront supprimés.

Une autre méthode consiste à gérer le Runnable lui-même:

 Runnable r = new Runnable { public void run() { if (booleanCancelMember != false) { //do what you need } } } 

Cela a fonctionné pour moi quand j’ai appelé CancelCallBacks (this) à l’intérieur du poste retardable en le remettant via un booléen

 Runnable runnable = new Runnable(){ @Override public void run() { Log.e("HANDLER", "run: Outside Runnable"); if (IsRecording) { Log.e("HANDLER", "run: Runnable"); handler.postDelayed(this, 2000); }else{ handler.removeCallbacks(this); } } };