web-dev-qa-db-fra.com

Comment arrêter le minuteur dans Android?

Je développe une application qui envoie un message à un numéro spécifique dans une période de temps spécifique. Le problème est qu'il continue d'envoyer ce message après cette période de temps. Comment pourrais-je arrêter le chronomètre après cette heure précise afin d'arrêter d'envoyer ce message?

34
Krishna
     CountDownTimer waitTimer;
     waitTimer = new CountDownTimer(60000, 300) {

       public void onTick(long millisUntilFinished) {
          //called every 300 milliseconds, which could be used to
          //send messages or some other action
       }

       public void onFinish() {
          //After 60000 milliseconds (60 sec) finish current 
          //if you would like to execute something when time finishes          
       }
     }.start();

pour arrêter la minuterie plus tôt:

     if(waitTimer != null) {
         waitTimer.cancel();
         waitTimer = null;
     }
66
ice911

et .. nous devons appeler "waitTimer.purge ()" pour le GC. Si vous n'utilisez plus Timer, "purge ()" !! "purge ()" supprime toutes les tâches annulées de la file d'attente des tâches.

if(waitTimer != null) {
   waitTimer.cancel();
   waitTimer.purge();
   waitTimer = null;
}
21
cmcromance

Dans Java.util.timer, on peut utiliser .cancel() pour arrêter le temporisateur et effacer toutes les tâches en attente.

9
Peter Knego

Nous pouvons programmer la minuterie pour faire le travail.Après la fin du temps que nous avons réglé, le message ne sera pas envoyé.

Voici le code.

Timer timer=new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
    @Override
    public void run() {
            //here you can write the code for send the message
        }
    }, 10, 60000);

Ici, la méthode que nous appelons est,

public void scheduleAtFixedRate (tâche TimerTask, long délai, longue période)

Ici,

tâche : la tâche à planifier

délai : durée en millisecondes avant la première exécution.

période : durée en millisecondes entre les exécutions suivantes.

Pour plus d'informations, vous pouvez consulter: Développeur Android

Vous pouvez arrêter le chronomètre en appelant,

timer.cancel();
5
SithuSena

J'ai eu un problème similaire: chaque fois que j'appuie sur un bouton particulier, je crée un nouveau minuteur.

my_timer = new Timer("MY_TIMER");
my_timer.schedule(new TimerTask() {
...
}

En sortant de cette activité, j'ai supprimé le minuteur:

if(my_timer!=null){
my_timer.cancel();
my_timer = null;
}

Mais cela ne suffisait pas car la méthode cancel() annulait uniquement le dernier Timer. Les plus anciens ont été ignorés et n'ont pas arrêté de courir. La méthode purge() ne m'a pas été utile. J'ai résolu le problème en vérifiant simplement l'instanciation Timer:

if(my_timer == null){
my_timer = new Timer("MY_TIMER");
my_timer.schedule(new TimerTask() {
...
}
}
2
Andrea Cassigoli

J'ai eu un problème similaire et il a été causé par le placement de l'initialisation du minuteur.

Il a été placé dans une méthode qui a été invoquée plus souvent.

Essaye ça:

Timer waitTimer;

  void exampleMethod() {

   if (waitTimer == null ) {
    //initialize your Timer here
    ...
   }

La méthode "cancel ()" n'a annulé que la dernière minuterie. Les plus anciens ont été ignorés et n'ont pas arrêté de courir.

1
dkdoemk43

Il dit que timer () n'est pas disponible sur Android? Vous pourriez trouver cet article utile.

http://developer.Android.com/resources/articles/timed-ui-updates.html


J'avais tort. Timer () est disponible. Il semble que vous l'implémentiez comme il s'agit d'une opération à un coup:

schedule(TimerTask task, Date when) // Schedule a task for single execution.

Ou vous l'annulez après la première exécution:

cancel()  // Cancels the Timer and all scheduled tasks.

http://developer.Android.com/reference/Java/util/Timer.html

1
dongshengcn