Comment arrêter la minuterie dans android? [fermé]

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 à envoyer ce message après cette période de temps. Comment arrêter la minuterie après cette heure spécifique afin d'arrêter d'envoyer ce message?

23
demandé sur 030 2011-02-14 18:11:53

7 réponses

     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 tôt:

     if(waitTimer != null) {
         waitTimer.cancel();
         waitTimer = null;
     }
59
répondu ice911 2011-02-14 16:17:23

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;
}
15
répondu cmcromance 2015-01-10 10:25:52

En java.util.timer on peut utiliser .cancel() pour arrêter le chronomètre et effacer toutes les tâches en attente.

9
répondu Peter Knego 2011-02-14 16:06:21

Nous pouvons programmer la minuterie pour faire le travail.Après la fin du temps, nous définissons le message ne sera pas envoyer.

C'est 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 appelant est,

Public void scheduleAtFixedRate (tâche TimerTask, long delay, longue période)

Ici

Tâche : la tâche à planifier

Retard: durée (en millisecondes) avant la première exécution.

Période : Durée millisecondes entre les exécutions suivantes.

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

Vous pouvez arrêter la minuterie en appelant,

timer.cancel();
4
répondu SithuSena 2015-11-04 08:52:37

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

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

En sortant de cette activité, j'ai supprimé la minuterie:

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

Mais ce n'était pas suffisant car 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. La méthode purge() n'était pas utile pour moi. 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
répondu Andrea Cassigoli 2016-04-08 14:52:30

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

Http://developer.android.com/resources/articles/timed-ui-updates.html


J'ai eu tort. Timer () est disponible. Il semble que vous l'implémentiez comme c'est une opération one shot:

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
répondu dongshengcn 2011-02-14 15:28:02

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

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

Essayez ceci:

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
répondu dkdoemk43 2012-09-19 21:22:35