Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Erkennen wenn Programm "zwangsweise" beendet wird? (https://www.delphipraxis.net/193597-erkennen-wenn-programm-zwangsweise-beendet-wird.html)

Rollo62 18. Aug 2017 14:28

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:
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;
Rollo

bra 18. Aug 2017 14:33

AW: Erkennen wenn Programm "zwangsweise" beendet wird?
 
Zitat:

Zitat von sko1 (Beitrag 1379000)
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...

Keine Kompilerschalter, einfach eine Abfrage:

Delphi-Quellcode:
var
  AppEventSvc: IFMXApplicationEventService;
begin

  if TPlatformServices.Current.SupportsPlatformService(IFMXApplicationEventService, IInterface(AppEventSvc)) then
    AppEventSvc.SetApplicationEventHandler(HandleAppEvent);

end;

Edit: Da ist jemand dazwischengerollot ;D

mjustin 18. Aug 2017 16:00

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)

Aviator 18. Aug 2017 16:29

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.

jaenicke 18. Aug 2017 22:03

AW: Erkennen wenn Programm "zwangsweise" beendet wird?
 
Zitat:

Zitat von mjustin (Beitrag 1379013)
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)

Mit den genannten Events.

Rollo62 hat ja auch ein Beispiel gepostet.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:57 Uhr.
Seite 2 von 2     12   

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