Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   [Android] App im Hintergrund arbeiten lassen (https://www.delphipraxis.net/189609-%5Bandroid%5D-app-im-hintergrund-arbeiten-lassen.html)

milos 29. Jun 2016 15:40

[Android] App im Hintergrund arbeiten lassen
 
Hallo,

ich versuche gerade verzweifelt mit meiner App im Hintergrund Daten von einem Server abragen zu lassen und ggf. eine Push-Notification auszulösen.
Versucht hab ich das schon mit Timern und Threads aber sobald die App "minimiert" wird (z.B. durch einen Klick auf den Home-Button) läuft da nichts mehr weiter...

Wie macht man das normalerweise und zuverlässig und möglichst Akku sparend?

Freundliche Grüsse

NickD 29. Jun 2016 15:49

AW: [Android] App im Hintergrund arbeiten lassen
 
Ich habe das mit TTask.Run() gelöst.
Dazu muss die Unit System.Threading eingebunden werden.
Funktioniert ohne Probleme.

DeddyH 29. Jun 2016 15:54

AW: [Android] App im Hintergrund arbeiten lassen
 
Kann es sein, dass man dafür Android-Services braucht?

NickD 29. Jun 2016 15:58

AW: [Android] App im Hintergrund arbeiten lassen
 
In meinem Fall hole ich Daten von einem Datasnap Server. Dies wird mit TTask auch weiterhin ausgeführt,
wenn die App in den Hintergrund gelegt wird oder das Display gesperrt wird.
Habe bisher keinen Android Service benötigt.
Der Service hat natürlich den Vorteil, auch bei geschlossener App weiter arbeiten zu können.

milos 29. Jun 2016 16:27

AW: [Android] App im Hintergrund arbeiten lassen
 
Wow nach dem ganzen rumgefuchtel hätte ich nicht gedacht das ein einfaches TTask mir da Abhilfe schafft, vielen dank! Werde ich nun in Zukunft öfters brauchen :)

Die Services werd ich mir auch mal ansehen, klingt nützlich.

Danke und schönen Abend noch :)

Freundliche Grüsse

Der schöne Günther 29. Jun 2016 16:44

AW: [Android] App im Hintergrund arbeiten lassen
 
Ich habe zwar momentan keinen Bedarf auf iOS/Android etwas im Hintergrund zu machen, möchte es aber trotzdem wissen: Funktioniert das nur zufällig oder ist das der "richtige" Weg noch im Hintergrund nach Beenden/"Suspenden" der App etwas zu erledigen? Ich hätte gedacht dass das OS der APP direkt jegliche Rechenzeit entzieht. Ich hätte erwartet dass das OS irgendwelche "Hintergrund"-Mechanismen bereitstellt.

Nicht dass sich in zwei Versionen etwas an der Implementierung (Delphi oder iOS/Android) ändert und dann wieder alle Zeter und Mordio schreien.

milos 29. Jun 2016 17:16

AW: [Android] App im Hintergrund arbeiten lassen
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1341543)
Ich habe zwar momentan keinen Bedarf auf iOS/Android etwas im Hintergrund zu machen, möchte es aber trotzdem wissen: Funktioniert das nur zufällig oder ist das der "richtige" Weg noch im Hintergrund nach Beenden/"Suspenden" der App etwas zu erledigen? Ich hätte gedacht dass das OS der APP direkt jegliche Rechenzeit entzieht. Ich hätte erwartet dass das OS irgendwelche "Hintergrund"-Mechanismen bereitstellt.

Ich hätte vorerst auch gedacht das Android da etwas bietet um Aufgaben im Hintergrund ausführen zu lassen jedoch scheint dies tatsächlich der gängige Weg zu sein. Timer funktionieren auch, habe jedoch einen Fehler beim Aufbau des Notification-Systems weswegen dies bei mir zunächst nicht funktionierte. Ob es nun der beste Weg ist das mit TTimer oder TTask zu lösen kann ich dir leider nicht sagen der Akku verbrauch scheint aber nicht viel höher zu sein und funktionieren tut es auch.

Freundliche Grüsse

bra 29. Jun 2016 17:23

AW: [Android] App im Hintergrund arbeiten lassen
 
Das funktioniert aber auch nur, solange die App nicht wirklich beendet wird (was unter Android möglich ist). Unter iOS läuft die App eigentlich immer, außer man schießt sie explizit ab.

Der schöne Günther 29. Jun 2016 18:00

AW: [Android] App im Hintergrund arbeiten lassen
 
Hat sich das derart verändert? Ich hatte das als schlichter Nutzer unter iOS eigentlich umgekehrt in Erinnerung. Damit habe ich mir dann auch erklärt dass man eigentlich immer nur Android-Nutzer über Akku-Probleme klagen hört, von iOS oder Windows hingegen nie (denn dort ist die Anwendung eigentlich direkt aus wenn nicht mehr sichtbar).

Sir Rufo 29. Jun 2016 18:32

AW: [Android] App im Hintergrund arbeiten lassen
 
Hier was aktuelles zu apple iOS http://delphiworlds.com/2016/06/perf...d-fetches-ios/

Und noch ganz frisch http://www.delphipraxis.net/189581-i...ntergrund.html (Android wird auch angesprochen)

NickD 29. Jun 2016 18:46

AW: [Android] App im Hintergrund arbeiten lassen
 
Beim iOS ist es so, dass der TTask etwa 10 Sekunden weiter läuft nachdem die App in den Hintergrund kommt. Danach stoppt dieser.
Es sei denn man verwendet den background fetch der erhöht die Zeit auf 30 Sekunden.
Dann gibt es da noch die "Ausnahmen" wie z.B. Musik-Apps oder Navigations-Apps.
Solange zum Beispiel ein Lied gespielt wird, bleibt die App auch im Hintergrund aktiv.
Unter iOS habe ich bisher keine Möglichkeit gefunden meine Tasks mehr als 10 Sekunden im Hintergrund laufen zu lassen.
Ziemlich stressig wenn man unter Android und iOS die selben "Features" anbieten möchte aber eines der beiden OS es unterbindet.

Sir Rufo 29. Jun 2016 19:29

AW: [Android] App im Hintergrund arbeiten lassen
 
Das liegt eben an iOS, dort sollen im Hintergrund nur geringe Mengen an Daten ausgetauscht werden.

Zudem will iOS die Kontrolle haben um mehrere Anwendungen - die auch im Hintergrund Daten haben wollen - besser zu steuern, wann diese ihren 30 Sekunden Zeitraum erhalten.

Ist sicher aufwändiger in der Programmierung aber besser für den Anwender

Der schöne Günther 30. Jun 2016 08:53

AW: [Android] App im Hintergrund arbeiten lassen
 
Meine Frage ist nur: Woher kommen diese "10 Sekunden"? Wer sagt dass es in der nächsten iOS-Version nicht auf 05 Sekunden reduziert wird soweit der Anwender nicht explizit ein "Kein Super-Stromsparmodus" für diese Anwendung aktiviert hat?

bra 30. Jun 2016 08:57

AW: [Android] App im Hintergrund arbeiten lassen
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1341589)
Meine Frage ist nur: Woher kommen diese "10 Sekunden"?

Von Apple.

Zitat:

Zitat von Der schöne Günther (Beitrag 1341589)
Wer sagt dass es in der nächsten iOS-Version nicht auf 05 Sekunden reduziert wird soweit der Anwender nicht explizit ein "Kein Super-Stromsparmodus" für diese Anwendung aktiviert hat?

Das kann auch nur Apple sagen.

Das viel größere Problem bei iOS ist, dass man bei neueren OS-Versionen und gesperrten und verschlüsseltem Gerät auch nicht mehr auf Dateien zugreifen kann, was in unserer App mit Datenbank die Hintergrund-Sync wieder nutzlos macht. Sprich, bei verschlüsseltem+gesperrten Gerät funktioniert das auch nicht mehr.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:14 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz