AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung Android APP crashed / startet neu bei Bild / Foto über die Actionlist / Systemkamera
Thema durchsuchen
Ansicht
Themen-Optionen

Android APP crashed / startet neu bei Bild / Foto über die Actionlist / Systemkamera

Ein Thema von fisipjm · begonnen am 28. Jan 2025 · letzter Beitrag vom 4. Mär 2025
Antwort Antwort
fisipjm

Registriert seit: 28. Okt 2013
315 Beiträge
 
Delphi 12 Athens
 
#1

Android APP crashed / startet neu bei Bild / Foto über die Actionlist / Systemkamera

  Alt 28. Jan 2025, 12:05
Hi, einfach nur ein kleiner Post weil ich dazu online nichts gefunden hatte und es mich das ein oder andere graue Haar gekostet hat bis ich es raus hatte. Vielleicht hilft es ja jemand.

Das Problem

Wenn Sie die TakePhotoAction aus der ActionList verwenden, wird Ihre App in den Hintergrund verschoben, und die Kamera-App des Systems wird in den Vordergrund gebracht. Viele Hersteller nutzen diesen Moment, um den Speicher aufzuräumen, was dazu führen kann, dass Ihre App vom System angehalten wird.

Nach Abschluss der Fotoaufnahme wird die TPhotoActivityResponseListener.onResponse von FMX.MediaLibrary.Android ausgelöst. Allerdings ist die ursprüngliche Methode LParams.OnDidFinishTaking nicht mehr zugewiesen, da die App während des Prozesses angehalten wurde.

Die Schwelle für dieses Verhalten hängt von den Speicherverwaltungseinstellungen des Herstellers ab. Basierend auf meinen Erkenntnissen:
  • Samsung-Geräte sind tendenziell am aggressivsten und halten Apps oft an, wenn die Speichernutzung ~50 MB überschreitet.
  • Andere Hersteller beginnen möglicherweise damit, Apps bei etwa ~100 MB anzuhalten.
  • Wenn speicheroptimierende Einstellungen vom Hersteller aktiviert sind, scheint ~500 MB eine "harte Grenze" zu sein, bei der Ihre App fast jedes Mal angehalten wird.

Um dies zu umgehen, sollten Sie eine Logik implementieren, die das Anhalten und Wiederherstellen der App korrekt behandelt, oder alternative Wege suchen, um den Fotoaufnahmeprozess zu verwalten.

Die Lösung

Stellen Sie zunächst sicher, dass der Code, der im OnTakePhotoFinish-Event ausgeführt wird, nur das Bild verarbeitet, das an das Event übergeben wird, und dass alle an diesem Prozess beteiligten Komponenten nach dem Neustart der App ordnungsgemäß verfügbar sind. Falls erforderlich, speichern Sie den aktuellen Zustand Ihrer Anwendung mithilfe des SaveState-Events. Dies ermöglicht es Ihnen, die benötigten App-Informationen wiederherzustellen und die richtigen Punkte nach dem Neustart der App zu navigieren. Weitere Details finden Sie in der FireMonkey Save State-Dokumentation: https://docwiki.embarcadero.com/RADS...key_Save_State

In dem ersten Formular, das nach dem Neustart Ihrer App erstellt wird, sollten Sie den MessageManager im OnCreate-Event einbinden. Hier ist ein Beispiel:

Delphi-Quellcode:
type
      TStartForm = class(TForm)
        procedure FormDestroy(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private
        { Private-Deklarationen }
        procedure MessageHandlerTakePhoto(const Sender: TObject; const M: TMessage);
      end;
    
    procedure TStartForm.FormCreate(Sender: TObject);
    begin
    TMessageManager.DefaultManager.SubscribeToMessage(TMessageDidFinishTakingImageFromCamera, MessageHandlerTakePhoto);
    end;
    
    procedure TStartForm.FormDestroy(Sender: TObject);
    begin
      TMessageManager.DefaultManager.Unsubscribe(TMessageDidFinishTakingImageFromCamera, MessageHandlerTakePhoto);
    end;
    
    procedure TStartForm.MessageHandlerTakePhoto(const Sender: TObject; const M: TMessage);
    begin
      if M is TMessageDidFinishTakingImageFromCamera then
      begin
        if Assigned(TMessageDidFinishTakingImageFromCamera(M).Value) then
        begin
          // Do something with the TMessageDidFinishTakingImageFromCamera(M).Value (TBitmap)
        end;
      end;
    end;

vG
PJM

Geändert von TBx ( 2. Mär 2025 um 09:05 Uhr) Grund: Code-Tags durch Delphi-Tags ersetzt
  Mit Zitat antworten Zitat
QuickAndDirty

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

AW: Android APP crashed / startet neu bei Bild / Foto über die Actionlist / Systemkam

  Alt 30. Jan 2025, 08:45
1. Das macht eigentlich TTakePhotoAction unbrauchbar.
2. In Tests habe ich das noch nicht erlebt, aber der Aufwand ist doch erheblich, für ein simples Foto.
3. Ich kenne niemanden der Leute in internet foren siezt, da die Netiquette hier das Du vorsieht. Schreibe ich hier mit einem Bot/LLM ?
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
fisipjm

Registriert seit: 28. Okt 2013
315 Beiträge
 
Delphi 12 Athens
 
#3

AW: Android APP crashed / startet neu bei Bild / Foto über die Actionlist / Systemkam

  Alt 1. Mär 2025, 18:59
1. Das macht eigentlich TTakePhotoAction unbrauchbar.
Nein, nur schwierig einzusetzen
Im Beispiel Projekt von Embarcadero funktioniert der Aufruf immer, weil der Test nur auf einer einzigen Form aufbaut. Sobald die Form die nach dem Start geladen wird eine andere ist läuft der Messagehandler ins leere.
2. In Tests habe ich das noch nicht erlebt, aber der Aufwand ist doch erheblich, für ein simples Foto.
Hast du mit dem Emba Beispiel getestet? Bzw. nur eine Form genutzt, dann funktioniert es aus dem Stand. Der Aufwand ist überschaubar, wenn der Code entsprechend strukturiert ist und keine Pfadabhängigkeiten in den Formaufrufen hat.


3. Ich kenne niemanden der Leute in internet foren siezt, da die Netiquette hier das Du vorsieht. Schreibe ich hier mit einem Bot/LLM ?
Nein, kein LLM. Ich hab den ursprünglichen Post in englisch verfasst und ein LLM zum übersetzen verwendet, erwischt und da hat die künstliche "Intelligenz" scheinbar nicht genug Kontext von mir bekommen
  Mit Zitat antworten Zitat
QuickAndDirty

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

AW: Android APP crashed / startet neu bei Bild / Foto über die Actionlist / Systemkam

  Alt 3. Mär 2025, 12:24
3. Ich kenne niemanden der Leute in internet foren siezt, da die Netiquette hier das Du vorsieht. Schreibe ich hier mit einem Bot/LLM ?
Nein, kein LLM. Ich hab den ursprünglichen Post in englisch verfasst und ein LLM zum übersetzen verwendet, erwischt und da hat die künstliche "Intelligenz" scheinbar nicht genug Kontext von mir bekommen
OMG. I'm glad you are not actually a person that insists on keeping the conversation formal on the Internet.
Also your LLM would make for bad spy.

2. In Tests habe ich das noch nicht erlebt, aber der Aufwand ist doch erheblich, für ein simples Foto.
Hast du mit dem Emba Beispiel getestet? Bzw. nur eine Form genutzt, dann funktioniert es aus dem Stand. Der Aufwand ist überschaubar, wenn der Code entsprechend strukturiert ist und keine Pfadabhängigkeiten in den Formaufrufen hat.
I allways do have some Forms instaciated. And so far it worked. Yet I'm not testing with all Veriosns of Android.

1.The first form that is Instanciated is a Splash-screen...while database tables are cashed and NFC and similar subscriptions are initialized.
2.Then My Main-Formular hosting the the Viewports and the Menu is initialized and the Splash screen is closed.
3.Depending on the Navigation inside the APP a Form is instanciated to be shown through the Viewports. The Form is closed when App-navigation has to create and show a different form through the Viewports.

That is the setup.
And so far I could allways use the takephoto action. Is there something wrong or risky that would affect the Messageque in that scenario?
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
fisipjm

Registriert seit: 28. Okt 2013
315 Beiträge
 
Delphi 12 Athens
 
#5

AW: Android APP crashed / startet neu bei Bild / Foto über die Actionlist / Systemkam

  Alt 4. Mär 2025, 14:35
Zunächst mal können wir gern im deutschen bleiben
Der original Post war nur englisch, weil ich die Erfahrung gemacht hab, dass die ohnehin schon sehr seltene Spezies des Mobile-Developers im Delphi Umfeld wenn überhaupt englisch spricht

And so far I could allways use the takephoto action. Is there something wrong or risky that would affect the Messageque in that scenario?
Ich würde sagen das kommt drauf an. Was für ein Gerät nutzt du für deine Entwicklung? Je näher du an Plain Android dran bist um so weniger wird das auffallen. Je mehr "Optimierungen" die Hersteller vornehmen um so eher wird das zum Problem.
Wie hoch ist deine RAM Auslastung? Ich verwende um das einfach und schnell auf Android festzustellen das wirklich grandiose Framework Kastri.
Einfach die Unit
Code:
DW.Androidapi.JNI.Os
einbinden.
Code:
TJDebug.JavaClass.getNativeHeapSize
gibt dir dann den verwendeten RAM deiner APP in Byte aus (Also einfach nochmal div (1024*1024) rechnen um auf die MB zu kommen)
Wenn du dauerhaft unter den 100 MB liegst, bekommst du wahrscheinlich niemals etwas davon mit. Und die 1-2 mal von 100 wird sich wahrscheinlich kein Anwender beschweren sondern einfach nochmal von Vorne anfangen.
  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 07:24 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 by Thomas Breitkreuz