AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung Delphi Restart einer Android App im Hintergrund
Thema durchsuchen
Ansicht
Themen-Optionen

Restart einer Android App im Hintergrund

Ein Thema von pollo · begonnen am 21. Okt 2024 · letzter Beitrag vom 25. Okt 2024
Antwort Antwort
Benutzerbild von pollo
pollo

Registriert seit: 28. Dez 2012
Ort: Werneck
6 Beiträge
 
FreePascal / Lazarus
 
#1

Restart einer Android App im Hintergrund

  Alt 21. Okt 2024, 17:29
Liebes Delphi Forum,
beim Praxis-Test meiner Android App stolpere ich über ein recht hartnäckiges Problem, weshalb ich mich vertrauensvoll an Euch wende. Beim Versuch einer Lösung blicke ich auf stundenlange Sitzungen mit ChatGPT 4o zurück, aber das hat alles nichts gebracht. Auch im Forum bin ich nicht weiter gekommen. Die dort vorgeschlagenen Livecycle Events lösen das Problem nur zum Teil.
Meine App sammelt im wesentlichen Daten in einem TStringGrid und gibt diese nach Drücken der Ok-Taste über einen TCP Kanal (Indy) an einen zweiten Rechner weiter. Über einen Timer erfolgt alle 2 Sekunden ein Heartbeat über denselben Kanal, um festzustellen ob die Verbindung (noch) besteht.
Das Problem liegt beim Beenden der App. Wird sie normal beendet (Ende-Button), ist alles gut. Aber es gibt leider noch weitere Möglichkeiten, wie sich meine Anwender um das ordnungsgemäße Beenden drücken können: Die Tasten in der unteren Reihe (Taskmanager, Home und Zurück), von denen ich mittlerweile das Klicken von „Home“ oder „Zurück“ abfragen bzw. erkennen kann, nicht aber den „Taskmanager“ Button.
Wird der Taskmanager Button gedrückt, verschwindet die App in den Hintergrund. Dort arbeitet sie ordnungsgemäß weiter - ich kann das daran erkennen, dass das Gegengerät den Heartbeat weiterhin registriert.
Klickt man nun in der Liste der „Recent Apps“ meine App wieder an, sollte man eigentlich erwarten, dass die App da weitermacht, wo sie zuvor aufgehört hat. Das ist aber nicht der Fall. Sie startet komplett neu, mit der Konsequenz, dass alle Daten des Grids verschwunden sind...
Meine Lösung sieht aktuell so aus, dass ich nach jeder Benutzereingabe den Inhalt des TstringGrids in den temporären Speicher des Smartphones schreibe. Findet die App beim Neustart solche Daten vor, so werden diese in das TStringGrid eingelesen. Das funktioniert perfekt, ist aber m. E. nicht die optimale Lösung.
Vielleicht habt Ihr eine Idee, wie man das eleganter lösen kann?
Meine IDE: RADStudio12
Das Test-Smartphone: Samsung A14 mit Android Version 14.
P.S. Ein Quellcode macht hier wenig Sinn, da das beschriebene Verhalten ja gleichermaßen bei jeder beliebigen App vorherrscht.
Gerd
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.093 Beiträge
 
Delphi 12 Athens
 
#2

AW: Restart einer Android App im Hintergrund

  Alt 21. Okt 2024, 17:58
Doch, Quellcode macht Sinn

Es geht Dir irgendwie um die Zurück-Tasten, vieleicht ist das hier interessant, ohne dein Problem direkt zu lösen
https://www.delphipraxis.net/215977-...ml#post1541870
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
741 Beiträge
 
#3

AW: Restart einer Android App im Hintergrund

  Alt 21. Okt 2024, 19:16
Hast du es Mal mit Application Events probiert?
  Mit Zitat antworten Zitat
Benutzerbild von pollo
pollo

Registriert seit: 28. Dez 2012
Ort: Werneck
6 Beiträge
 
FreePascal / Lazarus
 
#4

AW: Restart einer Android App im Hintergrund

  Alt 22. Okt 2024, 09:11
Mit dieser Unit konnte ich immerhin zwei der drei Buttons-Ereignisse abfangen (Home- und Zurück- Button).

Die Kernfrage aber bleibt: Warum macht die App nicht da weiter wo sie aufgehört hat, bevor sie in den Hintergrund verschoben wurde...
Angehängte Dateien
Dateityp: txt app_tmp.txt (2,0 KB, 10x aufgerufen)
Gerd
  Mit Zitat antworten Zitat
Klapauzius

Registriert seit: 8. Feb 2018
Ort: Region Bern (Schweiz)
74 Beiträge
 
Delphi 12 Athens
 
#5

AW: Restart einer Android App im Hintergrund

  Alt 23. Okt 2024, 13:30
Ich zitiere mal die Hilfe:
Zitat:
On mobile devices, especially with Android platform, when an application is in the background, the operating system might decide to kill the process.
In der Hilfe wird vorgeschlagen eine SaveState Procedure anzulegen: FireMonkey Save State
Albert
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
741 Beiträge
 
#6

AW: Restart einer Android App im Hintergrund

  Alt 23. Okt 2024, 16:44
Deswegen ja auch die vorgeschlagenen Application Events. Die sagen dir genau "jetzt Hintergrund", "Jetzt beenden" usw.
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.093 Beiträge
 
Delphi 12 Athens
 
#7

AW: Restart einer Android App im Hintergrund

  Alt 23. Okt 2024, 16:59
... Über einen Timer erfolgt alle 2 Sekunden ein Heartbeat ...
Nur so nebenbei, der normale Timer funktioniert so nicht, im Hintergrund.
Die ganze App läuft noch eine gewisse Weile im Hintergrund, um Aufräumarbeiten zu erlauben,
aber dann, spätestens nach ein paar Minuten werden die Prozess hart gekillt.
  Mit Zitat antworten Zitat
Benutzerbild von pollo
pollo

Registriert seit: 28. Dez 2012
Ort: Werneck
6 Beiträge
 
FreePascal / Lazarus
 
#8

AW: Restart einer Android App im Hintergrund

  Alt 25. Okt 2024, 17:41
Das sieht nach einer soliden Lösung aus. Vielen Dank an Klapauzius, aber auch an alle anderen Helfer!!!
Gerd
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:23 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