delphi如何在android下强制app关闭

时间:2016-09-24 21:14:40

标签: android delphi firemonkey

如果我们关闭应用程序并立即重新打开它,那么它们是android下的一个问题,那么如果它仍处于关闭过程中,我们会得到一个“白屏死机”。这是很正常的我认为,android尝试显示正在运行的应用程序,因为他可能不知道该应用程序正在完成。

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

1 个答案:

答案 0 :(得分:2)

关于英语单词的荒谬可能意味着它们应该是什么,或者基于语境的极端对立:这个词几乎没有'在这种情况下并不意味着“积极地”,这意味着“勉强”#39;或者几乎没有,但我从这里开始假设你的意思是“几乎不接近”。意味着被迫关闭'

似乎Application.Terminate是#34;官方方式",至少在最近的Delphi版本中。查看TPlatformAndroid.Terminate中的实现,它确实应该在结束时完成。

请注意,在XE5(包括Update Pack)中,TPlatformAndroid.Terminate方法为空。 Delphi XE6到XE8具有将IFMXApplicationService.Terminating设置为True的基础知识,终止计时器并指示基础本机活动完成对ANativeActivity_finish的调用。 Delphi 10 Seattle通过触发TForm.OnSaveState添加到此处,Delphi 10.1 Berlin采取措施确保所有这些代码在FMX线程中安全运行。

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

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

  • 调用主表单的Close方法 - >似乎在最近的版本中工作
  • 调用主表单的Release方法 - &gt;如果从主窗体方法调用,则生成EListError消息不平衡堆栈或队列操作,这要归功于Windows和Android上Release的行为和实现之间的显着差异< / LI>
  • 针对主要表单致电DisposeOf - &gt;如果从事件处理程序调用它会产生访问冲突,这要归功于它的直接效果 - 通常不是一个好结果
  • 通过调用TAndroidHelper.Activity.finish(依赖于Androidapi.Helpers单元)或MainActivity.finish(依赖于FMX.Platform.Android单元)来调用底层Android活动的finish方法) - &gt;似乎工作
  • 致电Halt - &gt;这是终止您的应用程序的最磨难的方式,不建议这样做:应用程序将突然绕过任何重要的清理代码等。
  • 使用Posix.Pthread,Posix.Unistd和Posix.Signal方法后调用kill(getpid, SIGKILL) - &gt;另一种极其磨损的方法(可能是最具磨蚀性的),不推荐使用:应用程序将突然绕过任何重要的清理代码等。