2016-09-24 166 views
1

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

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

+0

[如何在Delphi-XE5 Firemonkey应用程序中关闭android应用程序?](http:// stackoverflow。com/questions/19234502/how-to-close-android-app-in-delphi-xe5-firemonkey-application) –

+0

我会看看,尤其是建议SharedActivity.finish :)谢谢Jerry – loki

+0

我不明白任何东西,我编译classes.dex使用Api 23框架,现在应用程序关闭(几乎没有关闭 - 不要等待任何东西),即使他们正在运行后台任务:(现在的问题是什么设置使应用程序几乎没有关闭?只需使用Api 23编译classes.dex并使用@android:style/Theme.Material.Light.NoActionBar作为主题 – loki

回答

2

只是一个关于英语单词的荒谬性,可能意味着它们应该是什么或基于上下文的极性相反:在这种情况下,“难”这个词并不意味着'积极',它意味着'勉强'或'几乎没有',但我从此认为你的意思是“几乎不接近”,意思是“被迫关闭”。

看来,Application.Terminate是“官方的方式”,至少在更新版本的德尔福。看看TPlatformAndroid.Terminate中的实现,它在关闭时应该做什么。

请注意,在XE5(包括更新包)中,TPlatformAndroid.Terminate方法为空。 Delphi XE6到XE8具有将IFMXApplicationService.Terminating设置为True的基本知识,可终止定时器,并通过调用ANativeActivity_finish指示底层本机活动结束。德尔福10西雅图通过触发TForm.OnSaveState和Delphi 10.1增加了这一点,柏林采取措施确保所有代码在FMX线程中安全运行。

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

无论如何,如果你希望你可以尝试以下几种方法:

  • 调用主窗体的Close方法 - >似乎在最新版本的工作
  • 调用主窗体的Release方法 - >产生EListError有消息不平衡栈或队列操作如果从主窗体的方法由于在Windows上的行为和实施Release之间的显着差异被称为而在Android
  • 呼叫DisposeOf针对的主要形式 - >产生,如果从事件处理由于其直接效应称为访问冲突 - 通常不是一个好的结果
  • 电话致电TAndroidHelper.Activity.finishfinish方法底层的Android活动(依靠Androidapi.Helpers单元)或MainActivity.finish(依靠FMX.Platform.Android单元) - >似乎工作
  • 调用Halt - >这是一种最具磨蚀性的方式来终止您的应用程序,它不推荐:应用程序将突然结束绕过任何重要的清理代码等
  • 致电在使用Posix.Pthread,Posix.Unistd和Posix.Signal方法后 - >另一种非常具有磨蚀性的方法(可能是最具磨损性的),这是不推荐的:应用程序将突然结束绕过任何重要的清理代码等。
+0

对不起,我的英语有时非常糟糕:(我的意思是,据你所知,被迫关闭,但正如我所说,现在当我做主窗体的关闭时,它就像做“停止”:(我无法理解为什么...但无论如何,因为android是越野车,一个应用程序不能超过1秒关闭(否则android崩溃时,如果你仍然在关闭过程中再次启动应用程序),这样强制关闭不是一个非常糟糕的选择(但我想知道为什么突然现在它被关闭了一个部队,我会深入调查,我想这可能是因为我编译classes.dex使用api 23) – loki

+1

英语中有许多陷阱没有亲密这个例子是一个完全可以理解的例子,这要归功于基于上下文的多个相反的定义,无论如何,当你关闭主窗体时,会调用Application.Terminate来终止应用程序,由'TPlatformA'的外观ndroid.Terminate'。如果在某人按下主窗体上的返回按钮时发生这种情况,您可以捕获该返回按钮并设置5秒计时器,关闭主代码中的dow0,并让计时器调用Application.Terminate。这可能会带来时间。 – blong

相关问题