their is a problem under android, if we close the app and try immediately to reopen it, then if it's still in the process of closing we get a "white screen of death". It's quite normal i think, android try to show the running app because he maybe don't know that the app is in the process of finishing.
Normally the app must close immediately but sometime their is some background tasks running that don't close immediately (like http connection, file in process of writing to the drive, etc.). Is their a way to don't care of anything and hardly close the app ?
Just a point on the ridiculousness of English words that can mean either what they ought to or the polar opposite based on context: the word 'hardly' in this context doesn't mean 'aggressively', it means 'barely' or 'scarcely', but I assume from hereon in that you mean 'hardly close' to mean 'forced to close'.
It seems that Application.Terminate
is the "official way", at least in more recent versions of Delphi. Looking at the implementation in TPlatformAndroid.Terminate
it does what ought to be done on closing.
Note that in XE5 (including the Update Pack) the TPlatformAndroid.Terminate
method was empty. Delphi XE6 to XE8 has the basics of setting IFMXApplicationService.Terminating
to True
, terminating timers and instructing the underlying native activity to finish with a call to ANativeActivity_finish
. Delphi 10 Seattle added to this by triggering TForm.OnSaveState
and Delphi 10.1 Berlin takes steps to ensure all this code is run safely in the FMX thread.
There are other options, several of which have various drawbacks. The drawback of some of the seemingly obvious candidates is the production of runtime errors (・_・、)
Anyway, you could try these options if you wanted:
Close
method -> seems to work in recent versionsRelease
method -> produces an EListError
with message Unbalanced stack or queue operation if called from a main form method thanks to a marked difference between the behaviour and implementation of Release
on Windows and on AndroidDisposeOf
against the main form -> produces an Access Violation if called from an event handler thanks to its immediate efect - typically not a good resultfinish
method of the underlying Android activity by calling TAndroidHelper.Activity.finish
(which relies on the Androidapi.Helpers unit) or MainActivity.finish
(which relies on the FMX.Platform.Android unit) -> seems to workHalt
-> this is a most abrasive manner in which to terminate your application, which is not recommended: the app will abruptly end bypassing any important cleanup code, etc.kill(getpid, SIGKILL)
after using the Posix.Pthread, Posix.Unistd and Posix.Signal methods -> another extremely abrasive method (possibly the most abrasive), which is not recommended: the app will abruptly end bypassing any important cleanup code, etc.