Timer im Hintergrund laufen lassen

  • Hallo!
    Ich hätte da folgendes Problem:
    Ich versuche mir aktuell einen (Tee-)Timer zu schreiben. Dieser funktioniert sofern die App aktiv ist. Sobald das Display ausgeschalten ist, stimmt die dekrementierung von einer Sekunde nicht mehr.
    Verglichen mit einer realen Uhr, braucht der Timer z.b. statt einer Minute, eine Minute 25 Sekunden bis das Handy vibriert.



    Hierbei gehe ich folgendermaßen vor:


    Counter starten:

    Java
    public void startCountDown() {
            handler.removeCallbacks(runnable);
            handler.postDelayed(runnable,intervall);
        }


    Timerverarbeitung:



    Oder wäre ein Thread sinnvoller, da soweit ich das richtig gelesen habe, der Handler auf dem UI-Thread mit läuft? Abgesehen davon habe ich gelesen, das der Handler-Weg wohl der sauberer für sowas ein soll (UI-Updaten).
    Dann habe ich noch das Thema Service aufgegabelt. Habe dazu aber auch gelesen, dass Android auch diese willkürlich beenden kann.
    Oder wäre der Alarmanager sinnvoller? Hierzu habe ich gelesen, dass man diesen aber eher für Updateabfragen und Co z.B. aus dem Internet nutzt und eher weniger um das UI zu aktualisieren.


    Ich würde gerne den Timer universell schreiben um ihn dann später in anderen Projekten ggf. auch für längere Zeiten zu benutzen, daher sollte die Lösung wenn möglich unabhängig der Timerlänge sein.


    Konnte mir bisher aus den ganzen Sachen die ich gelesen habe keinen Schluss ziehen, was denn jetzt nun die sauberste Lösung ist...

  • So lange das Display aus ist, muss die UI nicht aktualisiert werden. Daher würde ich mit einem JobScheduler im Hintergrund arbeiten und das UI nur updaten wenn es nötig ist.


    https://developer.android.com/topic/performance/scheduling

  • Hi,
    also das die Zeit nicht stimmt. Liegt daran, du wartest ein sec. Schicks eine Nachricht an dich selbst, dann führst du etwas Code aus Updatest deine View, das alles braucht auch etwas Zeit. Danach wartest du wieder eine sec. und führst den Code wieder aus.
    somit ist die Zeit länger als eine sec.



    Zitat

    Dann habe ich noch das Thema Service aufgegabelt. Habe dazu aber auch gelesen, dass Android auch diese willkürlich beenden kann.

    Ja das stimmt schon das Android einen Service beenden kann, nur in deinem fall wird der Service wohl nich viel länger als 10 min laufen. Im allgemeinen beendet Android einen Service erst nach ca. 30 min.


    Ich würde dafür eher einen Timer nehmen und keinen Handler der eine sec wartet die Zeit des Händlers ich auch nicht so genau.



    https://developer.android.com/reference/java/util/Timer
    https://developer.android.com/…android/os/CountDownTimer

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!