Android relance de Minuteries après ils sont annulées
J'ai une minuterie dans mon application qui lance une AsyncTask toutes les 15 secondes.
Timer timer = new Timer();
public void AsynchTaskTimer() {
final Handler handler = new Handler();
TimerTask timertask = new TimerTask() {
@Override
public void run() {
handler.post(new Runnable() {
public void run() {
try {
new updateGPSTask().execute();
} catch (Exception e) {
//TODO Auto-generated catch block
}
}
});
}
};
timer.schedule(timertask, 0, 15000); //execute in every 15sec
}
C'est lancé à partir de la onCreate()
méthode.
Lorsque j'appelle une autre activité que j'ai besoin d'annuler cette minuterie, que j'ai fait à l'aide de timer.cancel()
sur mon onPause()
méthode dans mon Activité Principale.
Maintenant quand je retourne à l'Activité Principale, j'ai besoin de redémarrer la minuterie. J'ai essayé de relancer le AsynchTaskTimer()
dans le onRestart()
méthode, mais j'obtiens un java.lang.IllegalStateException: Timer was canceled
.
Comment puis-je redémarrer mon timer?
- réglez la minuterie comme nulle dans onpause et reinsiate comme timer = new Timer(); et de le lancer comme l'ancien haché objet a été annulé, il ne peut pas être redémarré à moins relancé un nouveau
- pourquoi êtes-vous à l'aide de gestionnaire et de la minuterie ensemble ?
Vous devez vous connecter pour publier un commentaire.
Essayez d'utiliser :
En utilisant cela, vous pouvez de nouveau allouer de la mémoire pour la Minuterie et le démarrer, autant que je sache.
onPause()
méthode!Donc ce que dit docs sur annuler() méthode:
Cela signifie que si vous annuler() Minuterie vous ne pouvez pas exécuter de nouveau. Vous avez besoin de créer une nouvelle instance de la Minuterie, par exemple dans
onResume()
méthode si vous souhaitez l'exécuter à nouveau.Au lieu d'utiliser
TimerTask
, vous pouvez déplacer votre code (qui est utilisé pour mettre à jour GPS) pour un service. Je pense que c'est mieux. Vous pouvez appelerstartService()
dansonCreate()
etstopService()
dansonDestroy()
. Notez que les services s'exécutent sur le main thread de l'INTERFACE utilisateur, alors assurez-vous d'éviter deNetworkOnMainThreadException
dans votre GPS en tâche de mise à jour.