Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   [Fmx] App crasht OnScreenRotation (https://www.delphipraxis.net/188305-%5Bfmx%5D-app-crasht-onscreenrotation.html)

Rollo62 18. Feb 2016 11:47

[Fmx] App crasht OnScreenRotation
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Leute,

ich bräuchte mal dringend eure Hilfe, ein Projekt das schon etwas weiter war crasht when der Screen gedreht wird.

[RadStudio 10 Seattle, Upd1, XCode 7.2, VmWare 8.2, Win8.1].
Crash getested im Moment unter Android, womöglich auch unter iOS.

Natürlich habe ich erstmal alle Codes von mit gecheckt, und dann den Code soweit abgespeckt das nur noch ein
Fmx Gerüst übrig bleibt.

Hier ist ein Demo wo der Crash auch passiert, es sind nur noch Visual Komponenten drin, ohne irgendeine Funktion,
ein Stylebook (crash aber auch wenn ich es nicht verbinde).

Ich benutze zur Organisation Header, Body und Footer Panels, in die TabControl sitzen welche verschiedene Views
zeigen können. Die Views (Panels) sind im Demo hier aber auch leer.
Wie kann das abstürzen ??

Ich bin ziemlich ratlos was dies jetzt wieder sein könnte, habe AppEvents und ScreenOrientationMessage abgefangen in ein Memo.

Es passiert Folgendes: (unter Android getestet, wie es jetzt bei iOS ist habe ich nicht getestet)
- Es startet immer OK, egal ob H oder V ScreenOrientation
- nur wenn die laufende App gedreht wird crasht es, und es werden folgene Events geschickt
- OnScreenOrientation change message (ja klar)
- WillBecomBackground (warum ?)
- WillTerminate (??? Hilfe)

Hat vielleocht jemand ein Idee ?

Namenloser 18. Feb 2016 12:08

AW: [Fmx] App crasht OnScreenRotation
 
Bist du sicher, dass sie crasht und nicht normal beendet wird? Es ist nämlich tatsächlich so, dass Android eine App nicht nachträglich rotieren kann. Die App wird intern jedes mal, wenn man den Bildschirm dreht, beendet und mit der neuen Auflösung neugestartet. Da bin ich vor ein paar Jahren auch drüber gestolpert, als ich mal ein bisschen mit App-Entwicklung für Android rumgespielt hatte (mit Java). Das hat Google wirklich dumm gelöst.

Ich glaube, man konnte es irgendwie verhindern, war aber ein undokumentiertes Feature. Wobei man prinzipiell seine App aber eh so schreiben muss, dass sie jeder Zeit unterbrochen werden kann, weil Apps im Hintergrund automatisch terminiert werden können, um den Energieverbrauch zu senken. Also macht man es besser gleich richtig.

Rollo62 18. Feb 2016 12:31

AW: [Fmx] App crasht OnScreenRotation
 
Eigentlich sollte der Bildschirm drehen, das funktionierte bisher immer.

Hier ist vor kurzem auch ein Beispiel von Sir Rufo http://www.delphipraxis.net/1330575-post2.html
Das habe ich getestet und es dreht sich wunderbar unter verschiedenen Geräten.

Es ist aber so wie ich geschrieben hatte, Android oder Fmx senden
WillBecomeBackground und WillTerminate

Also was kann das sein ?

Ich habe schon versucht Application/ScreenOrientation festzusetzen, aber das kracht auch.

Vermutlich liegt es doch irgendwo an den Komponenten selbst.
Z.B. TMultiView fragt auch die ScreenOrientation ab (benutze ich aber im Beispiel nicht mehr), könnten
irgendwelche anderen Komponenten abstürzen wenn das Device gedreht wird ?



Rollo

bra 18. Feb 2016 12:58

AW: [Fmx] App crasht OnScreenRotation
 
Zitat:

Zitat von Namenloser (Beitrag 1330741)
Bist du sicher, dass sie crasht und nicht normal beendet wird? Es ist nämlich tatsächlich so, dass Android eine App nicht nachträglich rotieren kann. Die App wird intern jedes mal, wenn man den Bildschirm dreht, beendet und mit der neuen Auflösung neugestartet. Da bin ich vor ein paar Jahren auch drüber gestolpert, als ich mal ein bisschen mit App-Entwicklung für Android rumgespielt hatte (mit Java). Das hat Google wirklich dumm gelöst.

Ich glaube, man konnte es irgendwie verhindern, war aber ein undokumentiertes Feature. Wobei man prinzipiell seine App aber eh so schreiben muss, dass sie jeder Zeit unterbrochen werden kann, weil Apps im Hintergrund automatisch terminiert werden können, um den Energieverbrauch zu senken. Also macht man es besser gleich richtig.

Keine Ahnung, wo du das her hast, aber das ist Quatsch. Unsere App unter Android lässt sich auch ohne Probleme rotieren und die kann man nicht so einfach beenden, weil da eine Datenbank mit Anmeldung dahintersteht.

bra 18. Feb 2016 13:03

AW: [Fmx] App crasht OnScreenRotation
 
Lösche mal die AndroidManifest.template.xml und lass die neu erzeugen. Ich denke dann funktioniert es. Problem liegt vermutlich an dieser Stelle:


Code:
<activity android:name="com.embarcadero.firemonkey.FMXNativeActivity"
                android:label="%activityLabel%"
                android:configChanges="orientation|keyboardHidden"
                android:launchMode="singleTask">
Da fehlen einige Einträge, mal als Vergleich die von uns:

Code:
<activity android:name="com.embarcadero.firemonkey.FMXNativeActivity"
                android:label="%activityLabel%"
                android:configChanges="orientation|keyboard|keyboardHidden|navigation|screenLayout|screenSize"
                android:launchMode="singleTask">

Rollo62 18. Feb 2016 13:04

AW: [Fmx] App crasht OnScreenRotation
 
Liste der Anhänge anzeigen (Anzahl: 1)
Also ich habe mittlerweile das Demo immer weiter abgespeckt:
- TabControls raus - crash
- Panels raus - crash
- Stylebook raus - crash
- DataModule raus - crash
- alle uses die unbenutzt sind raus -crash

Natürlich immer alle DCUs etc gelöcht, das ganze Android Verzeichnis - crash

Das macht mir langsam Angst :pale:
Ich habe jetzt nur noch die Form it einem Memo das die AppEvents und ScreenOrientation zeigt - crash

Hab die abgespeckte Demo nochmal im Anhang T81_....

Delphi-Quellcode:
unit UMain_Frm;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes
  , FMX.Forms
//  , System.Variants
//  FMX.Types, FMX.Controls, FMX.Forms, FMX.StdCtrls,
//  FMX.Layouts, FMX.Objects, FMX.ImgList,
//  FMX.Controls.Presentation
  , FMX.Platform
//  , FMX.ScrollBox
  , FMX.Memo
  , System.Messaging, FMX.Types, FMX.Controls, FMX.Controls.Presentation,
  FMX.ScrollBox
  ;

type
  TMain_Frm = class(TForm)
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    FOrientationChangedId: Integer;
    { Private declarations }

    procedure EvOnOrientationChanged(const Sender: TObject; const Msg: TMessage);
    function EvOnAppEvent(AAppEvent: TApplicationEvent; AContext: TObject): Boolean;

    procedure Log(const ALog : String);

  public
    { Public declarations }
  end;

var
  Main_Frm: TMain_Frm;

implementation

{$R *.fmx}

procedure TMain_Frm.FormCreate(Sender: TObject);
var
  aFMXApplicationEventService: IFMXApplicationEventService;
begin

  if TPlatformServices.Current.SupportsPlatformService(IFMXApplicationEventService, IInterface(aFMXApplicationEventService)) then
    aFMXApplicationEventService.SetApplicationEventHandler(EvOnAppEvent)
  else
    Log('Application Event Service is not supported.');


  //Subscribe to orientation change events in OnCreate or similar
  FOrientationChangedId := TMessageManager.DefaultManager.SubscribeToMessage(
       TOrientationChangedMessage, EvOnOrientationChanged);


end;





procedure TMain_Frm.FormDestroy(Sender: TObject);
begin
  //Unsubscribe from orientation change events in OnDestroy or similar
  TMessageManager.DefaultManager.Unsubscribe(TOrientationChangedMessage, FOrientationChangedId);
end;

procedure TMain_Frm.Log(const ALog: String);
begin
  Memo1.Lines.Insert(0, ALog);

end;


procedure TMain_Frm.EvOnOrientationChanged(const Sender: TObject; const Msg: TMessage);
begin
  Log('Orientation changed: ' + Msg.ToString);
end;


function TMain_Frm.EvOnAppEvent(AAppEvent: TApplicationEvent; AContext: TObject): Boolean;
begin

  case AAppEvent of
    TApplicationEvent.FinishedLaunching:   Log('Finished Launching');
    TApplicationEvent.BecameActive:        Log('Became Active');
    TApplicationEvent.WillBecomeInactive:  Log('Will Become Inactive');
    TApplicationEvent.EnteredBackground:   Log('Entered Background');
    TApplicationEvent.WillBecomeForeground: Log('Will Become Foreground');
    TApplicationEvent.WillTerminate:       Log('Will Terminate');
    TApplicationEvent.LowMemory:           Log('AppEvent: Low Memory');
    TApplicationEvent.TimeChange:          Log('AppEvent: Time Change');
    TApplicationEvent.OpenURL:             Log('AppEvent: Open URL');
    else
                                            Log('AppEvent: Unknown');
  end;
  Result := True;
end;

end.

Rollo62 18. Feb 2016 13:07

AW: [Fmx] App crasht OnScreenRotation
 
@bra

Dankesehr, du bist mein Retter.
Das wars.

Wie kann denn sowas passieren ?

Also ist mein neuer Fmx-RescuePlan: vor jedem Build die xml löschen.

Danke, danke, danke :thumb:

Rollo

bra 18. Feb 2016 13:12

AW: [Fmx] App crasht OnScreenRotation
 
Bei uns ist die App ursprünglich abgestürzt, sobald eine Bluetooth-Tastatur angeschlossen wurde. Das war derselbe Grund gewesen. Scheinbar werden die XMLs immer mal erweitert ;)

Rollo62 18. Feb 2016 13:15

AW: [Fmx] App crasht OnScreenRotation
 
Liste der Anhänge anzeigen (Anzahl: 1)
@bra

So ganz verstehe ich es noch nicht, es stimmt immer noch nicht mit deinem Template überein.
Aber es dreht jetzt wenigstens.

Anhang 44801

Links ist neu angeletes Template, rechts das alte, korrupte Template.

Was hat das jetzt mit dem ScreenOrientation zu tun, vieleicht hat noch jemand eine Erklärung ?

Was sollte ich denn in Fmx Einstellen damit das Template möglichst Narrensicher wird ?

Rollo

Namenloser 18. Feb 2016 13:24

AW: [Fmx] App crasht OnScreenRotation
 
Zitat:

Zitat von bra (Beitrag 1330749)
Keine Ahnung, wo du das her hast, aber das ist Quatsch. Unsere App unter Android lässt sich auch ohne Probleme rotieren und die kann man nicht so einfach beenden, weil da eine Datenbank mit Anmeldung dahintersteht.

Ok, habe mich insofern geirrt, als dass das Flag zum Abstellen dieses Verhaltens nicht undokumentiert ist. Es wird aber trotzdem davon abgeraten, sich darauf zu verlassen, weil eben auch andere Ereignisse Neustarts der App auslösen können.

Siehe
Zitat:

Zitat von bra (Beitrag 1330756)
Bei uns ist die App ursprünglich abgestürzt, sobald eine Bluetooth-Tastatur angeschlossen wurde. Das war derselbe Grund gewesen. Scheinbar werden die XMLs immer mal erweitert ;)



Alle Zeitangaben in WEZ +1. Es ist jetzt 16:19 Uhr.
Seite 1 von 2  1 2      

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