Timer() oder gibts was eleganteres?

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Timer() oder gibts was eleganteres?

    Hallo,

    ich brauche in einer App derzeit mehrere Timer, die zu unterschiedlichen Abständen Daten senden. Vom Prinzip so was:
    Wenn sich das Telefon bewegt (Beschleunigungssensor) sende alle 5s einen Datensatz
    Wenn das Telefon sich für 120s nicht mehr bewegt hat, sende nur noch alle 30s
    Wenn das Telefon für 300s nicht bewegt wurde, sende nur noch alle 60s

    Derzeit löse ich das mit Timer() der eben alle x Sekunden tickt. Die App sollte aber auch im Hintergrund weiter laufen können, und wenn iOS die App killt, würde ich die gerne per Silent Push wieder wecken.

    Meine Frage als: Gibts was eleganteres als Timer() oder ist das schon die elegante Lösung?

    Danke um voraus

    Dirk
  • Qvex23 schrieb:

    Meine Frage als: Gibts was eleganteres als Timer() oder ist das schon die elegante Lösung?
    Schau dir mal UNNotification an.

    Bei den kurzen Intervallen dürfte deine App systematisch den Akku leersaugen. Ich vermute mal, dass das auch Schwierigkeiten an der Grenze zum App-Store gibt. Am besten liest du dir erst mal durch, was Apple zum Thema Hintergrundausführung sagt.

    MCDan schrieb:

    Ich tippe jetzt mal, dass ein Timer von iOS angehalten wird, wenn die App deaktiviert ist.
    Genau so ist es.
    „Meine Komplikation hatte eine Komplikation.“
  • Das das Akku braucht lässt sich wohl nicht verhindern, ich weiß auch ehrlich gesagt nicht was ich mir bei UNNotification anschauen soll!? Die Frage war ja eigentlich: Macht man das regelmäßige Übertragen von Daten mit Timer() oder gibts da was eleganteres? Ich will nicht vom Pushserver aus alle 5s einen silent push senden damit ich eine Position bekommen, das kann das Telefone doch, solange die App läuft sicher irgendwie selbst regeln, oder?

    Wenn die App in den Background geht und gekillt wird, dann brauche ich Hintergrundausführung Silent pushes um zumindest ab und an eine Position zu bekommen, denn 500m Differenz sind etwas viel für eine Ortung in dem Maße wie ich sie vor habe.
  • Qvex23 schrieb:

    Wenn die App in den Background geht und gekillt wird, dann brauche ich Hintergrundausführung Silent pushes um zumindest ab und an eine Position zu bekommen, denn 500m Differenz sind etwas viel für eine Ortung in dem Maße wie ich sie vor habe.
    Da brauchst du wirklich keine Timer. Wie MCDan bereits sagte, bietet CLLocationManager da sinnvollere Möglichkeiten. Schau dir mal konkret die Property distanceFilter an.
  • Qvex23 schrieb:

    Das das Akku braucht lässt sich wohl nicht verhindern, [...]
    Apple ist da recht klar:

    Apple schrieb:

    2.4.2 Design your app to use power efficiently. Apps should not rapidly drain battery, generate excessive heat, or put unnecessary strain on device resources. Apps, including any third party advertisements displayed within them, may not run unrelated background processes, such as cryptocurrency mining.

    Qvex23 schrieb:

    [...] ich weiß auch ehrlich gesagt nicht was ich mir bei UNNotification anschauen soll!?
    Wieder mal so ein Forumsklassiker: Halbe Informationen ergeben unerwünschte Antworten. Naja, eine bessere Alternative hat dir ja MCDan genannt.
    „Meine Komplikation hatte eine Komplikation.“
  • Das Design der App und des Backends verpflichtet das ich diese Timer benötige. Sollten die Signale ausbleiben führt das zu einem neuen Event. Es gibt noch einen grundsätzlichen KeepAlive, den ich nicht erwähnt habe. Meine Android Kollegen lächeln alle über Timer, die müssen/dürfen/sollen das wohl in Threads machen. Das veranlasste mich eben mal nachzufragen ob Timer() ok ist, oder ob es besser geht. Es geht hier auch um keine App die so in den Endkunden Store kommen soll, wird wohl eher Enterprise. Gelten dort denn die selben Regeln, oder ist das dort etwas weniger restriktiv?