Thread mit Runnable als Countdown

2

2slow4you

Gast
Hallo zusammen,

ich bin gerade dabei eine App zu entwickeln, die den User an zeitabhängige Ereignisse in Spielen errinern soll. Dafür habe ich jetzt für jedes Ereignis einen Button mit eigener onClick Methode genommen, die dann einen Thread startet, der solange läuft, bis ein bestimmter Wert bis Null heruntergezählt ist.

Es funktionert auch alles soweit, der Button wird jede Sekunde aktualisiert und am Ende kommt die Notification auch an. Doch zwei Dinge laufen noch nicht wie gewollt:

1.: Der Countdown läuft im Hintergrund weiter, wenn man die App mit dem Homebutton beendet, doch wenn man das Gerät sperrt und den Display ausschaltet, macht er scheinbar eine Pause. Sobald der Display wieder an ist, läuft der Thread weiter. Wie kann man den Thread jetzt so einstellen, dass er auch mit ausgeschaltenem Display weiterläuft?

2.: Wenn man die App zum Beispiel mit dem Homebutton beendet und die App dann wieder aufruft, wird der Button nicht mehr aktualisiert, obwohl der Thread im Hintergrund weiterläuft. Wie kann ich das Aktualisieren wieder fortsetzen? Mit onResume() vielleicht?

Das ist der Code, der von jedem Button ausgeführt wird:
Code:
Thread game_a1 = new Thread() {
                 @Override
                  public void run() {
                    try {
                      while (actualtimea1 > 1) {
                        Thread.sleep(delay);//1000
                        runOnUiThread(new Runnable() {
                          @Override
                          public void run() {
                              actualtimea1 = actualtimea1 - 1;
                                buttona1.setText(actualthinga1 +  ": " + String.valueOf(actualtimea1));
                                timerHasStarted_a1 = true;
                                
                                if (actualtimea1 == 0) {
                                    Notification("Gameplay Timer", "The " + actualthinga1 + " is back!");
                                    actualtimea1 = newtime;
                                    buttona1.setText(actualthinga1 + " (End)");
                                    timerHasStarted_a1 = false;
                                }
                          }
                        });
                      }
                    } catch (InterruptedException e) {
                    }
                  }
                };
                if (!timerHasStarted_a1) {
                game_a1.start();
                }
Kann mir jemand eine Lösung zu den oben genannten Fragen geben oder soll ich besser gar keinen Thread verwenden? Als ich aber einen Countdowntimer genommen habe, hat er immer die verschiedenen Countdowns durcheinandergeschmissen.

Vielen Dank schonmal
 
Du solltest dir mal
AlarmManager | Android Developers
angucken.

Damit kannst du dein Ziel einfacher und mit weniger Batterieverbrauch umsetzen.

Zumindest den Teil bis zur Notification.

Für die Buttons musste deinen eigenen Timer wohl behalten.
Du solltest aber bei OnStop() dann speichern wo dein Timer aufgehört bzw. du solltest dir die zeit merken, zu der dein timer aufhört.

Wenn deine App dann wieder gestartet wird kannst du die Zeit auslesen und berechnen wie viel Zeit noch bis dahin ist und dann den timer wieder starten. (mit Aktualisierung).

Generell sollten alle Threads beendet werden, wenn deine App beendet wird.
Ansonsten verbraucht deine App zu viel sinnlosen Strom. Da deine App ja keinerlei Infos braucht wenn sie nicht läuft.
 

Ähnliche Themen

Manny87
  • Manny87
Antworten
11
Aufrufe
289
swa00
swa00
R
  • raller
Antworten
15
Aufrufe
661
DOT2010
DOT2010
S
Antworten
4
Aufrufe
1.144
Sempervivum
S
Zurück
Oben Unten