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?
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;
}
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;
}
En java.util.timer on peut utiliser .cancel()
pour arrêter le chronomètre et effacer toutes les tâches en attente.
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();
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() {
...
}
}
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.
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.