• Willkommen im Geoclub - dem größten deutschsprachigen Geocaching-Forum. Registriere dich kostenlos, um alle Inhalte zu sehen und neue Beiträge zu erstellen.

Verhalten von Timern beim Speichern und Fokusverlust

Charlenni

Geomaster
Heute habe ich mal wieder eine Frage :D

Wie sollte sich ein Timer auf einem Smartphone verhalten, wenn die App den focus verliert, also in den Hintergrund geht. Damit hat sie ja keinen Bildschirm mehr, auf dem Meldungen ausgegeben werden können. Damit gibt es dann folgende Möglichkeiten:

1. Der Timer läuft lustig weiter, kann aber eigentlich nichts mehr machen respektive nichts mehr ausgeben
2. Der Timer wird angehalten und läuft, nachdem die Anwendung wieder den Bildschirm hat, lustig an der Stelle der Unterbrechung weiter, wie wenn nichts gewesen wäre.
3. Der Timer läuft nicht weiter und ruft einfach OnTick für alle Timer auf.
4. Der Timer läuft nicht weiter und berechnet, wenn er wieder aufwacht, ob er in der Zwischenzeit abgelaufen ist und ruft in diesem Fall OnTick nachträglich auf, auch wenn es schon lange vorbei ist.
5. Papperlapapp. Nur ich weiß, was gemacht werden soll. Deshalb prüfe ich diese Dinge in einem OnRestartTimer Ereignis selbst ab und entscheide nach Sachlage.
6. Ich habe noch eine viel bessere Idee.

Das Problem tritt ja auch bei Save/Restore auf. Allerdings werden auf den Garmins einfach für alle Timer die Ereignisse OnTick aufgerufen, was auch etwas suboptimal sein kann.

Also, was erwartet Ihr?

Vielen Dank für die Mithilfe
Dirk (Charlenni)
 

jonny65

Geomaster
Du schon wieder ? Du sollst doch üben :lachtot:

Also ich hab ja kein Schmarrfon, aber "ich kann Timer" :/ Und der Effekt ist ja bei Garmin mit dem Save und Restore der gleiche. Es ist hier so, daß der Timer an die Uhr gekoppelt ist und somit in Echtzeit läuft. Z.b Countdown 30...29...28...ich beende und speichere, stell dann nach 20 Minuten wieder her und was ist ? Der Timer ist natürlich abgelaufen.

Dieses Verhalten find ich im allgemeinen korrekt. Ich kann im Flugzeug nicht einschlafen, egal wie müde. Aber sagen wir ich könnte einschlafen, wärs dann nicht saudoof, wenn ich nach 2 Stunden aufwache und das Flugzeug ist immer noch an der Stelle wo ich eingeschlafen bin ? :irre:

Andererseits wäre eine Option, eine Objekteigenschaft des Timers sinnvoll, genau dies zu umgehen. Wenn der Spieler ein Wherigo macht, speichert und 2 Tage später wirklich GENAU dort weitermacht. der Countdown steht also auf 28 Sekunden. Geht jetzt schon mit umständlichem Speichern von Timer.Remaining und Timer Neustart nach Restore, aber so ein "Timerflag" (z.b Sleep=true/false) würde das überflüssig machen. Das wäre dann ne Sache für Herrn Urwigo und Earwigo. Also : Der Programmierer sollte selber und der Situation angepasst entscheiden, wie er den Timer handelt.

Ich denk grad an die beknackten "Strafzeiten" in manchen WIGs. Da muss der Timer natürlich weiterlaufen, auch wenn der Spieler mit seinem Smartfön in der "Strafzeit" mal kurz seine EMails checkt und der Fokus weg ist.

Nummer 5 trifft meine Vorstellung also am ehesten. Timer läuft weiter oder stoppt je nach gesetzter Timereigenschaft ("Sleepflag")
 

TeamBunteBlitze

Geocacher
Hallo,

Ich denke der Programmierer sollte entscheiden können wie sich der Timer verhält wenn der WiG den Focus verliert.

Allerdings sollte dabei auch unterschieden werden, ob der Focusverlust auf Grund einer Benutzerhandlung (z.B. Homebutton gedrückt) oder einer anderen Anwendung (z.B. Telefon klingelt) erfolgt.

VG

Sven
 
OP
C

Charlenni

Geomaster
Das wird schwer gehen, da die App gar nicht mitbekommt, warum sie vom Bildschirm verdrängt wurde. Damit entfällt eine Unterscheidungsmöglichkeit.

Aber Unterscheidung durch den Cartridge-Ersteller würde ich mir auch wünschen, heißt, der Ersteller gibt an, ob der Timer weiterläuft oder nicht, während die Cartridge gespeichert ist.
 

TeamBunteBlitze

Geocacher
Hallo,

Charlenni schrieb:
Das wird schwer gehen, da die App gar nicht mitbekommt, warum sie vom Bildschirm verdrängt wurde.

Sicher? In einer Multitasking-Umgebung doch eigentlich schon. Die App prüft kurz nach Verlust des Focus ob nun eine andere App den Focus hat, wenn ja wurde sie von einer anderen App verdrängt. Hat aber nun das OS den Focus, dann wurde der Homebutton betätigt. Oder?

Allerdings müßte noch geklärt werden, wer bei Push-Nachrichten u. dgl. Den Focus hat.

VG

Sven
 
OP
C

Charlenni

Geomaster
Ne, denn wenn die App. Den Focus verliert macht sie nichts mehr, da sie offiziell keine Rechenzeit mehr bekommt. Wenigstens unter iOS.

Und weg ist weg. Ob der User jetzt telefoniert oder doch gerner Vögel abschießt spielt für die Cartridge keine Rolle.
 
OP
C

Charlenni

Geomaster
@Jonn65: Ich komme mal wieder betteln :hilfe:

Hast Du zufällig noch die Test-Cartridge für das Timer speichern? Dann könnte ich das mal testen, wie das so geht und ob ich das Verhalten hinbekomme.

Schon im voraus vielen Dank.
 

jonny65

Geomaster
Also ich hab da absichtlich 2 Timer, da der Countdown unabhängig laufen soll. Der Zähler zeigt die Restzeit als Item Description und zusätzlich als Itemname. iPhone und Garmin verhalten sich hier nämlich unterschiedlich. Im Hauptmenü aktualisiert der Garmin nicht, aber dafür im Itemmenü und in der Beschreibung. Also irgendwo sollte bei allen Geräten die aktualisierte Restzeit angezeigt werden, Hauptmenü, Itemmenü oder Bescheibung. Das müsste auch einheitlich sein, denn einige Wherigos benutzen ja sowas zur Restzeitanzeige.

Also Uhr starten, Countdown läuft (Zeit definierbar in Variable "Countdownzeit"), 55...54, jetzt mal beenden und speichern. Wieder aufrufen, Countdownzeit dann 32...31. Message wenn Ende. Diese poppt sofort nach einem Restore auf, wenn das Gerät länger aus war, als der Restcountdown läuft.

Urwigodatei, GWC und Lua anbei.
 

Anhänge

  • timertest.zip
    9,6 KB · Aufrufe: 22

docfred

Geocacher
Ich finde auch, der Programmierer solte (für jeden Timer) entscheiden können, wie der sich verhält.

Es gibt ja schon jetzt Möglichkeiten beides zu realisieren.
- Ich kann den Timerstand immer in einer Variablen ablegen, die heruntergezählt wird. (Das würde beim Speichern nicht weiterlaufen). In Multitasking OSs läuft sie allerdings im Hintergrund weiter.
- Ich kann immer mit der Systemzeit vergleichen, das "läuft weiter". (Abgesehen von der Manipulation der Systemzeit)
 

kansu_makugen

Geocacher
- Ich kann immer mit der Systemzeit vergleichen, das "läuft weiter". (Abgesehen von der Manipulation der Systemzeit)

Das ist, denke ich, der vernünftigste Weg. Wenn der Timer startet, wird die (System)Zeit "gemessen". Wenn dann das zeitgesteuerte Ereignis eintritt, wird wieder die Zeit genommen und mit einem Referenzwert verglichen. Fertig. Dem "integrierten" Timer traue ich irgendwie nicht über den Weg.
Wie das aber bei sich wiederholenden Timern (Endlosschleife) funktioniert, könnte ich auf Anhieb nicht sagen. Hab ich bisher nicht gebraucht.
 
Oben