AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung Delphi versehentliches Beenden einer Android App

versehentliches Beenden einer Android App

Ein Thema von pollo · begonnen am 26. Feb 2024 · letzter Beitrag vom 3. Mai 2024
Antwort Antwort
philipp.hofmann

Registriert seit: 21. Mär 2012
Ort: Hannover
942 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: versehentliches Beenden einer Android App

  Alt 28. Feb 2024, 14:20
Es gibt in Android- und iOS-App ja kein normales Close, was ich also Nutzer in der App aufrufen kann. Ich kann nur die App von außen schließen und dies kann man auch über die App nicht verhindern. OnCloseQuery ist ja dazu da, dass Beenden im Zweifelfall zu verhindern, um noch eine Frage zu stellen oder was auch immer. Verhindern geht unter Android nicht, wenn der Nutzer die App wegschiebt, schiebt er sie weg.

Wenn die App beim Klick auf den Back-Button auch crasht, macht sie an der Stelle etwas anderes, was so jetzt in geordnete Bahnen umgelenkt wurde.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.580 Beiträge
 
Delphi 12 Athens
 
#2

AW: versehentliches Beenden einer Android App

  Alt 28. Feb 2024, 15:44
Ja, Wegschieben ala "wie im Windows quasi per Taskmanager schließen/abschießen",

doch hier ging es um das Schließen über den "Zurück"-Knopf und da steuert "eigentlich" Delphi die Aktion,
drum hätte ich gedacht, dass es hier dann auch über's OnClose/OnCloseQuery läuft.

Bzw. in der VCL wird OnCloseQuery auch nur beim Close aufgerufen, aber nicht wenn man direkt Free/Release oder Application.Terminate auslöst.



Ich kenn aber auch so schon mehrere Programme, wo das "Zurück" nicht immer funktioniert (auch nicht Delphi).
Dort wird bei zurück normal erstmal die aktuelle Aktion beendet (Menüfenster geschlossen) und wenn bereits im Hauptfenster, dann kommt eine "Programm beenden?"-Frage,
aber oftmals macht der Knopf einfach garnichts. (Handy neu starten und danach vielleicht wieder)
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (28. Feb 2024 um 15:49 Uhr)
  Mit Zitat antworten Zitat
philipp.hofmann

Registriert seit: 21. Mär 2012
Ort: Hannover
942 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: versehentliches Beenden einer Android App

  Alt 28. Feb 2024, 21:48
Bei FMX wird unter Windows bei einem Terminate von außen auch die OnCloseQuery aufgerufen, aber trotzdem wird die App dann beendet, sprich eine Rückfrage sieht man an der Stelle nur noch, kann sie aber nicht mehr beantworten.
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
2.058 Beiträge
 
Delphi 12 Athens
 
#4

AW: versehentliches Beenden einer Android App

  Alt 29. Feb 2024, 11:50
Du musst die Livecycle Events deiner App berücksichtigen!
Delphi-Quellcode:
procedure TAppForm.FormCreate(Sender: TObject);
Begin
    //Intercept LifeCycleEvents
    var aFMXApplicationEventService:IFMXApplicationEventService
    if TPlatformServices.Current.SupportsPlatformService(IFMXApplicationEventService, IInterface(aFMXApplicationEventService) ) then
      aFMXApplicationEventService.SetApplicationEventHandler(HandleAppEvent)
    else
      Tlog.d('Application Event Service is not supported.');
end;
Und
Delphi-Quellcode:
function TAppForm.HandleAppEvent(AAppEvent: TApplicationEvent; AContext: TObject): Boolean;
begin
  case AAppEvent of
    TApplicationEvent.FinishedLaunching: TLog.d('FinishedLaunching'); // Only Android, Probably IOS too (App has been started by the user)
    TApplicationEvent.BecameActive: TLog.d('BecameActive'); // Both (App is in USE)
    TApplicationEvent.WillBecomeInactive: TLog.d('WillBecomeInactive'); // Only Android, Probably IOS too (Focus is about to switch to other app)
    TApplicationEvent.EnteredBackground: // Both (App is beeing executed while in the Background)
    Begin
      TLog.d('EnteredBackground');
      TAppViewModel.getinstance.EnterBackground;
    End;
    TApplicationEvent.WillBecomeForeground: // Both (App is focused)
    Begin
      TLog.d('WillBecomeForeground') ;
      TAppViewModel.getinstance.EnterForeground;
    End;
    TApplicationEvent.WillTerminate:TLog.d('WillTerminate') ; // Both (User terminted the APP)
    TApplicationEvent.LowMemory: TLog.d('LowMemory'); // Both (Please use less memory, please! But how?)
    TApplicationEvent.TimeChange:TLog.d('TimeChange') ; // IOS
    TApplicationEvent.OpenURL:TLog.d('OpenURL') ; // IOS
  end;
  Result := True;
end;
Dadurch kannst du alle Eingaben sichern befor die App beendet wird und die Eingaben wieder laden und anzeigen wenn die App fortgesetzt wird und nichts geht verloren
Andreas
Nobody goes there anymore. It's too crowded!

Geändert von QuickAndDirty (29. Feb 2024 um 11:53 Uhr)
  Mit Zitat antworten Zitat
MAXON

Registriert seit: 28. Aug 2009
15 Beiträge
 
#5

AW: versehentliches Beenden einer Android App

  Alt 30. Apr 2024, 23:09
Hi,
wo kommt denn das TAppViewModel her?
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
2.058 Beiträge
 
Delphi 12 Athens
 
#6

AW: versehentliches Beenden einer Android App

  Alt 3. Mai 2024, 14:25
Hi,
wo kommt denn das TAppViewModel her?
Das ist eine Klasse in meiner Anwendung.

TAppForm ist das Main-Formular der APP

procedure TAppForm.FormCreate(Sender: TObject); ist der prozedur kopf eines OnFormCreate Ereignisses auf dem MainFormular.

Delphi-Quellcode:
    //Intercept LifeCycleEvents
    var aFMXApplicationEventService:IFMXApplicationEventService
    if TPlatformServices.Current.SupportsPlatformService(IFMXApplicationEventService, IInterface(aFMXApplicationEventService) ) then
      aFMXApplicationEventService.SetApplicationEventHandler(HandleAppEvent)
    else
      Tlog.d('Application Event Service is not supported.');
Dieser Code hinterlegt eine Methode HandleAppEvent als Ereignis Handler für LifeCycleEvents einer Android App.
Immer wenn ein solches Event auf tritt wird die Methode HandleAppEvent von Android benachrichtigt , damit du darauf reagieren kannst.


function TAppForm.HandleAppEvent(AAppEvent: TApplicationEvent; AContext: TObject): Boolean; Das ist der Methoden kopf der Methode die wir als EventHandler hinterlegt haben.

Delphi-Quellcode:
  case AAppEvent of
    TApplicationEvent.FinishedLaunching: TLog.d('FinishedLaunching'); // Only Android, Probably IOS too (App has been started by the user)
    TApplicationEvent.BecameActive: TLog.d('BecameActive'); // Both (App is in USE)
    TApplicationEvent.WillBecomeInactive: TLog.d('WillBecomeInactive'); // Only Android, Probably IOS too (Focus is about to switch to other app)
    TApplicationEvent.EnteredBackground: // Both (App is beeing executed while in the Background)
    Begin
      TLog.d('EnteredBackground');
      TAppViewModel.getinstance.EnterBackground;
    End;
    TApplicationEvent.WillBecomeForeground: // Both (App is focused)
    Begin
      TLog.d('WillBecomeForeground') ;
      TAppViewModel.getinstance.EnterForeground;
    End;
    TApplicationEvent.WillTerminate:TLog.d('WillTerminate') ; // Both (User terminted the APP)
    TApplicationEvent.LowMemory: TLog.d('LowMemory'); // Both (Please use less memory, please! But how?)
    TApplicationEvent.TimeChange:TLog.d('TimeChange') ; // IOS
    TApplicationEvent.OpenURL:TLog.d('OpenURL') ; // IOS
  end;
  Result := True;
Das ist ein Beispiel code dessen was man an Events im Eventhandler abfangen kann. Ich logge die meisten Events nur und wenn die Anwendung in den Hintergrund gerät schalte ich NFC und GPS ab und wenn sie in den Vordergrund kommt schalte ich es wieder ein. Ich schone damit den Akku. Für dich ist das vielleicht gar nicht wichtig .

  TApplicationEvent.WillTerminate:TLog.d('WillTerminate') ; // Both (User terminted the APP) Das Event aber vielleicht schon. Wenn dieses Event kommt kannst du noch eingreifen befor deine App stirbt.

Wenn du alle livecycle Events und das onException event deiner App loggs ist das vielleicht auch hilfreich.
Andreas
Nobody goes there anymore. It's too crowded!
  Mit Zitat antworten Zitat
Antwort Antwort

 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 09:31 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