![]() |
Android & Application.Run
Ich kann mich daran erinnern, das Threading Model von FMX für Android hat sich mal geändert. Aber ich kann mich nicht erinnern wann... :stupid:
Normalerweise ist ein Application.Run ein Methodenaufruf, der erst dann zurück kommt, wenn die App/Anwendung geschlossen wird... Nicht so auf Android. :warn: Beispiel:
Delphi-Quellcode:
Was steht auf dem Form? Richtig... "Nachher".
program Project94;
uses System.StartUpCopy, System.Messaging, FMX.Forms, Unit70 in 'Unit70.pas' {Form70}; {$R *.res} var S : String; IsSet : boolean; begin Application.Initialize; S := 'Vorher'; IsSet := false; Form70 := NIL; Application.CreateForm(TForm70, Form70); TMessageManager.DefaultManager.SubscribeToMessage( TFormsCreatedMessage, procedure( const Sender: TObject; const M: TMessage ) begin if Assigned( Form70 ) and not IsSet then begin Form70.Label1.Text := S; IsSet := True; end; end ); Application.Run; S := 'Nachher'; end. Wegen Java, wollen meine "alten" XE-Versionen nicht und ich habe leider keine VM mehr... Hat jemand einen Idee? Grüsse Mavarik :coder: |
AW: Android & Application.Run
Wo liegt dabei denn das Problem? Es ist ja (wie du sicherlich selbst weißt) normal, dass unter Android Methoden auch zurückkehren bevor sie abgearbeitet sind, z.B. auch bei der Anzeige von Dialogen.
Beim Beenden der App etwas tun geht an der Stelle dann nicht, aber geht es dir darum? |
AW: Android & Application.Run
Zitat:
Aber ich habe einen ganzen Tag einen einer Exception gesucht... Da der Debugger aber (11.3) erst dann connected wird, wenn Application.Run zurück gekommen ist (Hatte ich leider auch nicht "mehr" auf dem Schirm - mache wenn es geht einen großen Bogen um Android) kann man keinen Source in Unit Initializations und nix debuggen, bevor das nicht passiert ist. Mavarik |
AW: Android & Application.Run
Zitat:
|
AW: Android & Application.Run
Zitat:
Wenn Du in meinem Beispiel einen Breakpoint auf
Delphi-Quellcode:
setzt, hält der Debugger da nie an.
S := 'Vorher'
Und Du hast dafür einen Workaround? |
AW: Android & Application.Run
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Das klappt genauso wie das Debuggen des Startens eines Dienstes unter Windows: Anhang 55921 Sprich du packst nach dem begin im Projekt eine Schleife rein. Unter Windows kann das einfach
Delphi-Quellcode:
sein. Unter Android muss man das etwas abwandeln. Dort prüft man auf eine Variable. Setzt man dort einen Haltepunkt, kommt man trotzdem nicht an.
while not IsDebuggerPresent do
ABER: Wenn du nach dem Start an der Stelle bist, sprich den Startbildschirm der App siehst und es dort hängt, dann drückst du einfach auf Anhalten. Dann landest du an der Schleife und kannst dort die Variable mit Strg + F7 ändern. Wenn du dann fortsetzt, landest du bei den weiteren Haltepunkten ganz normal. |
AW: Android & Application.Run
Zitat:
![]() ![]() Habe ich nie gebraucht, aber ich meine, dass gestartete Threads noch bis zum Ende weiterlaufen, also ideal um eine Message zu TCP abzusetzen. Bin mir aber jetzt auch nicht 100*% sicher, ob die bei Android nicht doch hart gekillt werden. |
AW: Android & Application.Run
Zitat:
Im Prinzip sind für Windows alle Threads gleich, also egal ob Hauptthread oder ein Anderer. Ja, man könnte vielleich davon ausgehen, dass Windows den Thread, welchen es selber für die Programminitialisierung gestartet hat, eventuell anders behandelt ... aber scheinbar nö. Hmmmm ... ob nun Unixoide (Linux oder Android) das anders handhaben ... gute Frage, aber warum sollten die denn einen der Threads (Hauptthread) bevorzugt behandeln? :stupid: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:40 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