delphi如何在android下强制关闭应用程序

delphi如何在android下强制关闭应用程序,android,delphi,firemonkey,Android,Delphi,Firemonkey,在安卓系统下,这是一个问题,如果我们关闭应用程序并立即尝试重新打开它,那么如果它仍在关闭过程中,我们会看到一个“死亡的白色屏幕”。我认为这很正常,安卓尝试展示running应用程序,因为他可能不知道该应用程序正在完成 通常情况下,应用程序必须立即关闭,但有时它们的后台任务运行时不会立即关闭(如http连接、正在写入驱动器的文件等)。它们是一种不关心任何事情、几乎不关闭应用程序的方式吗?只是一个关于英语单词的荒谬之处,这些单词可能意味着它们应该表达的意思,也可能是基于上下文的相反意思:在这个上下文

在安卓系统下,这是一个问题,如果我们关闭应用程序并立即尝试重新打开它,那么如果它仍在关闭过程中,我们会看到一个“死亡的白色屏幕”。我认为这很正常,安卓尝试展示running应用程序,因为他可能不知道该应用程序正在完成

通常情况下,应用程序必须立即关闭,但有时它们的后台任务运行时不会立即关闭(如http连接、正在写入驱动器的文件等)。它们是一种不关心任何事情、几乎不关闭应用程序的方式吗?

只是一个关于英语单词的荒谬之处,这些单词可能意味着它们应该表达的意思,也可能是基于上下文的相反意思:在这个上下文中,“几乎”一词并不意味着“侵略性”,它意味着“几乎”或“几乎”,但我假设从这里开始,你的意思是“几乎接近”到“被迫接近”

这似乎是“官方方式”,至少在Delphi的最新版本中是这样。查看
TPlatformAndroid.Terminate中的实现,它执行关闭时应该执行的操作

请注意,在XE5(包括更新包)中,
TPlatformAndroid.Terminate
方法为空。Delphi XE6到XE8具有设置为
True
、终止计时器和指示底层本机活动以调用完成的基本功能。Delphi 10.1通过触发添加到这一点,Delphi 10.1 Berlin采取步骤确保所有这些代码在FMX线程中安全运行

还有其他选择,其中几个有各种缺点。一些看似明显的候选对象的缺点是产生运行时错误(・_・、)

无论如何,如果您愿意,您可以尝试以下选项:

  • 调用主窗体的方法->在最新版本中似乎有效
  • 调用主窗体的方法->如果从主窗体方法调用,则生成带有消息不平衡堆栈或队列操作的
    EListError
    ,这是由于Windows和Android上的
    Release
    的行为和实现之间存在显著差异
  • 对主窗体的调用->如果从事件处理程序调用,则会产生访问冲突,这要归功于它的即时效果-通常不是一个好结果
  • 通过调用
    tandrodhelper.activity.finish
    (依赖于Androidapi.Helpers单元)或
    MainActivity.finish
    (依赖于FMX.Platform.Android单元)调用底层Android活动的方法似乎可行
  • call->这是终止应用程序的一种最粗暴的方式,不建议这样做:应用程序将绕过任何重要的清理代码,突然终止,等等
  • 在使用Posix.Pthread、Posix.Unistd和Posix.Signal方法->另一种非常粗糙的方法(可能是最粗糙的方法)后调用,这是不推荐的:应用程序将突然结束绕过任何重要的清理代码,等等

我将查看可能的重复项,特别是建议SharedActivity.finish:)谢谢Jerry我什么都不懂,我使用Api 23框架编译classes.dex,现在应用程序关闭(几乎关闭-不要等待任何东西),即使他们正在运行后台任务:(现在好问题是什么设置使应用程序几乎关闭?我只是使用Api 23编译classes.dex,并使用@android:style/Theme.Material.Light.NoActionBar作为主题,“几乎关闭”可能意味着两个相反的事情。你是说它“很难关闭”还是说它“几乎关闭”?你在哪里调用代码?这取决于你是否希望指示你的应用程序关闭。如果你希望你的应用程序在后台继续运行,那么在它完成之前,不要告诉它关闭。当你关闭主窗体时,应用程序关闭,但也要等待不同单元的完成。以前是这样的。现在,然后我不知道为什么,当我关闭主窗体时,应用程序会关闭,但不要等待不同单元的最终完成,应用程序会立即停止…我不知道为什么现在是这样的是的,对不起,我的英语有时很差:(我的意思是,正如你所理解的,被迫关闭。但正如我所说,现在当我关闭主窗体时,就像做“停止”一样:(我不明白为什么……但无论如何,由于android有缺陷,一个应用程序关闭的时间不能超过1秒(否则,当应用程序仍在关闭过程中时,如果您再次启动该应用程序,android会崩溃),因此强制关闭并不是一个很坏的选择(但我想知道为什么现在突然它被一个力关闭了,我会更深入地研究,我想这可能是因为我使用api 23编译classes.dex)对于那些不熟悉它的人来说,英语中有很多陷阱,对于那些熟悉它的人来说也有很多。这个例子是一个完全可以理解的例子,这多亏了基于上下文的多个相反的定义。无论如何,当你关闭主窗体时,
Application.Terminate被调用,它会终止应用程序。从
TPla的外观上看,很快t Formandroid.Terminate
。如果有人按下主窗体上的“后退”按钮时发生这种情况,您可以捕捉该后退按钮并设置5秒计时器,关闭主代码中的0,然后让计时器调用
应用程序。Terminate
。这可能会给您时间。