Ich habe einen Timer in meiner Anwendung, der alle 15 Sekunden eine AsyncTask startet.
%Vor% Dies wird von der Methode onCreate()
gestartet.
Wenn ich eine andere Aktivität anrufe, muss ich diesen Timer abbrechen, was ich mit timer.cancel()
auf meiner Methode onPause()
in meiner Hauptaktivität getan habe.
Wenn ich jetzt zur Hauptaktivität zurückkehre, muss ich den Timer neu starten. Ich habe versucht, das AsynchTaskTimer()
in der Methode onRestart()
neu zu starten, aber ich bekomme java.lang.IllegalStateException: Timer was canceled
.
Wie starte ich meinen Timer neu?
Versuchen Sie es mit:
%Vor%Damit können Sie den Speicher erneut dem Timer zuweisen und ihn mit AFAIK starten.
Also, was sagt Docs über cancel () Methode:
Beachten Sie, dass diese Methode innerhalb der run-Methode von a aufgerufen wird Die Wiederholung der Timer-Aufgabe garantiert absolut, dass die Timer-Aufgabe ausgeführt wird nicht mehr laufen.
Das bedeutet, wenn Sie den Timer einmal abbrechen (), können Sie ihn nicht mehr ausführen. Sie müssen eine neue Instanz von Timer erstellen, beispielsweise in der Methode onResume()
wenn Sie es erneut ausführen möchten.
Anstatt TimerTask
zu verwenden, können Sie Ihren Code (der zum Aktualisieren von GPS verwendet wird) in einen Dienst verschieben . Ich denke es ist besser. Sie können startService()
in onCreate()
aufrufen. und stopService()
in onDestroy()
. Beachten Sie, dass Dienste auf dem Hauptthread der Benutzeroberfläche ausgeführt werden. Vermeiden Sie daher NetworkOnMainThreadException
in Ihrem Konto GPS-Updater-Aufgabe.
Tags und Links android timer android-asynctask