![]() |
Erkennen wenn Programm "zwangsweise" beendet wird?
Hallo,
bei Android ist es ja eigentlich so wie bei Windows : man öffnet eine App, startet dann ein andere (z.B. die Galerie oder das Telefon) und wenn man zur App zurückkehrt ist sie in dem Zustand wie vor dem verlassen. Nun scheint es aber so dass, wenn der Speicher zu Ende geht, Android dann selbst Apps schließt? Wenn dem so sein sollte, gibt es einen Weg darauf zu reagieren? Ciao Stefan |
AW: Erkennen wenn Programm "zwangsweise" beendet wird?
Zitat:
Android lagert Programme eh aus dem RAM aus, wenn sie inaktiv sind, so ähnlich wie mit der Auslagerungsdatei im Windows. Also geht der RAM zuende, dann wird der Speicher auf den Datenträger ausgelagert. Und wenn/falls ein Programm abgeschossen wird (terminiert / hart beendet), dann würde es natürlich auf nichts reagieren können. Wenn ich dir den Kopf wegballer, dann hast du auch keine Zeit mehr in Ruhe irgendwas abzustellen, damit es nicht runterfällt und dich dann gemütlich hinzulegen, um nicht wie ein nasser Sack umzukippen und hart aufzuschlagen. |
AW: Erkennen wenn Programm "zwangsweise" beendet wird?
Zitat:
Zitat:
![]() tl;dr: Deine App muss so entwickelt sein, daß sie jederzeit abgeschossen werden kann, ohne daß signifikanter Datenverlust auftritt. Das obliegt komplett Deiner Verantwortung. Sherlock |
AW: Erkennen wenn Programm "zwangsweise" beendet wird?
Dafür gibt es entsprechende Events:
![]() Nur wenn die Anwendung darauf nicht schnell genug reagiert oder der User einen Task selbst killt, wird sie hart beendet ohne dass du etwas mitbekommst. Es sollte aber nie ein Problem sein, wenn deine App gekillt wird, denn das ist ein Standardfall. Wenn du eine App wie Kindle killst, wird sie nach dem Start trotzdem wieder an fast der gleichen Stelle weitermachen. Weil der Status nicht erst beim Beenden gespeichert wird. |
AW: Erkennen wenn Programm "zwangsweise" beendet wird?
Zitat:
Bei mir funktioniert "leider" alles, nur bei einem Anwender ist es so dass, wenn er auf seinem Handy eine andere App startet und die wieder beendet und zu meiner zurück wechseln will, befindet diese sich im "Anfangsmodus", also alle bereits gemachten Eingaben z.B. sind weg! Das möchte ich irgendwie abfangen! Ciao Stefan |
AW: Erkennen wenn Programm "zwangsweise" beendet wird?
Es gibt sehr wohl eine Unterscheidung zwischen Arbeitsspeicher, also Programmausführungsspeicher, und Speicher...ähm...Speicher.
Sherlock |
AW: Erkennen wenn Programm "zwangsweise" beendet wird?
"Interner Gerätespeicher"
Halt der Festwertspeicher, egal wie man ihn da mennen mag. Bei Festplatte schließen ich z.B. auch SSDs mit ein, auch wenn sich da keine Platte mehr dreht. Ringkernspeicher, Magnettrommel, Datasette, HDD, SSHD, SSD, USB-Stick, MemoryCard, SD-Card, ... |
AW: Erkennen wenn Programm "zwangsweise" beendet wird?
Ist die App vielleicht einfach nur abgestürzt? Das ist ja bei Delphi-Apps leider keine Seltenheit...
|
AW: Erkennen wenn Programm "zwangsweise" beendet wird?
Nein, generell (fast immer) wenn eine andere App gestartet wird, bei hunderten anderen Anwendern gibt es ja da keine Probleme!
Application-Events klingt interessant, nur bringt mich die verlinkte Embarcadreo-Seite irgendwie nicht weiter, hat jemand einen kurzen Schnipsel Code zur Anwendung? Und wenn ich das Ganze richtig gelesen habe, gibt es das auch nur für Android/iOS, wenn ich das Projekt auch für Windows compilieren möchte brauch ich dann entsprechende Compilerschalter... Ciao Stefan |
AW: Erkennen wenn Programm "zwangsweise" beendet wird?
Mach Dir doch nicht so nen Kopf um diese Events. Speicher einfach zeitnah jede Änderung ab. Beim nächsten App-Start sollte dann auch alles da sein. KISS.
Sherlock |
AW: Erkennen wenn Programm "zwangsweise" beendet wird?
Die ApplicationEvents die Sebastion erwähnt sind ein "Muss", sich darum zu kümmern.
Wenn du die LowMemory nicht bearbeitest wird deine App gekillt. Bei den BecameActive, etc. bin ich nicht sicher, könnte aber auch sein das diese bearbeitet sein wollen um nicht dein Programm wieder neustarten zu lassen. Ich mache das automatisch bei jeder App so, und die Programme können im Hintergrund weiterleben.
Delphi-Quellcode:
Rollo
procedure TView_Manager.AppEvents_Subscribe;
var AppEventSvc: IFMXApplicationEventService; begin if TPlatformServices.Current.SupportsPlatformService(IFMXApplicationEventService, IInterface(AppEventSvc)) then AppEventSvc.SetApplicationEventHandler(EvOnAppEvent); end; function TView_Manager.EvOnAppEvent(AAppEvent: TApplicationEvent; AContext: TObject): Boolean; var cmd : TS4Api_SysEvents.TApi; begin Result := True; cmd := TS4Api_SysEvents.TApi.None; case AAppEvent of TApplicationEvent.FinishedLaunching : cmd := TS4Api_SysEvents.TApi.FinishedLaunching; TApplicationEvent.BecameActive : cmd := TS4Api_SysEvents.TApi.BecameActive; TApplicationEvent.WillBecomeInactive : cmd := TS4Api_SysEvents.TApi.WillBecomeInactive; TApplicationEvent.EnteredBackground : cmd := TS4Api_SysEvents.TApi.EnteredBackground; TApplicationEvent.WillBecomeForeground: cmd := TS4Api_SysEvents.TApi.WillBecomeForeground; TApplicationEvent.WillTerminate : cmd := TS4Api_SysEvents.TApi.WillTerminate; TApplicationEvent.LowMemory : cmd := TS4Api_SysEvents.TApi.LowMemory; TApplicationEvent.TimeChange : cmd := TS4Api_SysEvents.TApi.TimeChange; TApplicationEvent.OpenURL : cmd := TS4Api_SysEvents.TApi.OpenURL; else ; end; if cmd <> TS4Api_SysEvents.TApi.None then begin TS4Msg_SysEvents.SendMessage(Self, cmd); // Ja ich weiss, ich leite ein Event in einen anderen Event weiter // Aber so kann ich diese sehr leicht abfangen und evtl. an verschiedenen Stellen verarbeiten end; end; |
AW: Erkennen wenn Programm "zwangsweise" beendet wird?
Zitat:
Delphi-Quellcode:
var
AppEventSvc: IFMXApplicationEventService; begin if TPlatformServices.Current.SupportsPlatformService(IFMXApplicationEventService, IInterface(AppEventSvc)) then AppEventSvc.SetApplicationEventHandler(HandleAppEvent); end; Edit: Da ist jemand dazwischengerollot ;D |
AW: Erkennen wenn Programm "zwangsweise" beendet wird?
Ist mir auch aufgefallen: wischen der Anwendung aus der History Liste killt sie sofort, auch wenn sie zum Beispiel noch in einem Thread einen Upload macht.
Daher muß man dann alle Daten die gesendet werden sollen noch zwischenspeichern und beim nächsten Start den Upload wiederholen. Aber die Frage ist noch offen: wie kann man erkennen, wenn das eigene Programm abgeschossen wird? (Um dann z.B. noch eine Notification zu erzeugen) |
AW: Erkennen wenn Programm "zwangsweise" beendet wird?
Ich habe zwar keine Ahnung von Android Programmierung, aber wie kann man bei Android überhaupt eine Anwendung "beenden" ohne Sie über die Taskliste rauszuwerfen? Selbst eine Anwendung die das saubere Beenden über das mehrfache Klicken des Zurück-Buttons angeblich unterstützt, steht nach dem Schließen immer noch in der Taskliste und kann da vermeintlich auch nochmal beendet werden.
Das saubere Beenden einer Anwendung könnte man evtl. dadurch erkennen, dass während des sauberen Shutdown Prozesses in einer Datei oder Datenbank auf dem Gerät ein entsprechender Wert gesetzt wird. Wird die Anwendung gekillt, dann bleibt der Wert auf dem Status "nicht sauber beendet" und das Programm kann den letzten Zustand wiederherstellen. Ob das jetzt die beste Lösung ist kann ich aber nicht sagen. |
AW: Erkennen wenn Programm "zwangsweise" beendet wird?
Zitat:
Rollo62 hat ja auch ein Beispiel gepostet. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:29 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz