Android - Contrôle d'une tâche avec Minuterie et TimerTask?
Je suis en train d'essayer de configurer une connexion WiFi Scan dans mon application Android qui recherche les points d'accès WiFi toutes les 30 secondes.
J'ai utilisé de la Minuterie et TimerTask pour obtenir le scan fonctionne correctement à des intervalles dont j'ai besoin.
Cependant je veux être en mesure d'arrêter et de démarrer la numérisation lorsque l'utilisateur appuie sur un bouton et je suis actuellement de la difficulté à l'arrêt et le redémarrage de la Minuterie et TimerTask.
Voici mon code
TimerTask scanTask;
final Handler handler = new Handler();
Timer t = new Timer();
public void doWifiScan(){
scanTask = new TimerTask() {
public void run() {
handler.post(new Runnable() {
public void run() {
wifiManager.scan(context);
Log.d("TIMER", "Timer set off");
}
});
}};
t.schedule(scanTask, 300, 30000);
}
public void stopScan(){
if(scanTask!=null){
Log.d("TIMER", "timer canceled");
scanTask.cancel();
}
}
Si la Minuterie et de début de Tâche de l'amende et de l'analyse qui se passe toutes les 30 secondes, cependant je ne peux pas l'obtenir pour arrêter, je peux arrêt de la Minuterie, mais la tâche se produit encore et scanTask.annuler() ne semble pas fonctionner non plus.
Est-il une meilleure façon de le faire? Ou ai-je raté quelque chose dans le Timer/TimerTask classes?
Vous devez vous connecter pour publier un commentaire.
Vous pourriez envisager:
cancel()
sur votre tâche, comme il se doit indiquer si votre demande réussit ou échouepurge()
oucancel()
sur leTimer
au lieu de laTimerTask
Si vous n'avez pas nécessairement besoin
Timer
etTimerTask
, vous pouvez toujours utiliserpostDelayed()
(disponible sur le conducteur et sur touteView
). Cela permettra de planifier uneRunnable
à être exécuté sur le thread de l'INTERFACE utilisateur après un certain délai. Pour l'avoir reproduit, tout simplement l'annexe elle-même à nouveau après avoir fait votre périodiques peu de travail. Vous pouvez ensuite contrôler un indicateur booléen pour indiquer lorsque ce processus devrait prendre fin. Par exemple:scanTask
est en cours de réinitialisation ànull
, et à partir de fragments de code que vous avez présenté, il est impossible de dire pourquoi ou nhow hotel.postDelayed()
est pas une option dans unService
, mais il est difficile de savoir pourquoi vous voulez/besoin d'unService
dans ce cas.à l'aide de votre code, au lieu de
la bonne façon est d'annuler votre minuterie (pas timerTask):
Android documentation dit que annuler() Annule la Minuterie et de toutes les tâches planifiées. Si il y a une tâche en cours d'exécution, il n'est pas affecté. Pas plus de tâches peuvent être planifiés sur ce Timer. Les appels suivants ne rien faire. Ce qui explique le problème.