【发布时间】:2021-10-24 22:36:05
【问题描述】:
不知道为什么这对我来说如此具有挑战性,但我如何检测用户何时终止应用程序?因为据我所见,Apple 提供了很多在应用关闭时可能会调用也可能不会调用的函数。
func applicationWillTerminate(_ application: UIApplication):在(大多数)应用程序终止时调用,但不适用于支持后台执行的应用程序。
func sceneDidEnterBackground(_ scene: UIScene):场景进入后台时调用,但无法区分应用进入后台还是完全终止。
func sceneDidDisconnect(_ scene: UIScene):我确认如果用户直接终止应用程序,则调用此方法,但如果将应用程序置于后台然后终止,则不会调用它..
// 编辑: 所以我意识到上面的方法(sceneDidDisconnect)确实是我正在寻找的功能。我以前认为在上述后一种情况下没有调用它,但实际上是这样。请参阅(即将)接受的答案。
是否有每次用户终止应用时都会调用的函数???
【问题讨论】:
-
不,没有万无一失的方法可以知道应用程序何时终止。而且你永远不应该依赖任何被调用的终止函数。为什么?因为应用程序终止可能不优雅。例如,手机可能内存不足,应用程序被紧急终止。或者电池没电了。所以最好假设应用程序可以在没有任何事先警告的情况下随时被终止,从而使用其他触发器执行您想要在终止时执行的操作,例如在状态变化时,或只是周期性地
-
很高兴知道。有没有办法查看应用程序在之前处于后台后何时关闭?例如,如果我退出一个应用程序(但不终止它),然后转到我的应用程序切换器并终止该应用程序?如果设置了警报,Alarmy 可以这样做以在人们终止应用时通知他们。
-
我不知道他们做了什么,所以我只能推测他们可能将
applicationWillTerminate与其他方法结合使用,例如后台获取(如果应用程序未运行,将导致应用程序启动,但我相信限制在 30 分钟左右),并且可能会安排本地通知... -
我可能感觉到您的问题存在问题。在 iOS 中,用户通常不会关闭应用程序。 (他们曾经可能有,但大多数人都知道他们不需要。但在你的问题中,你特别提到了这三遍。在 iOS 中,通常是 OS 终止应用程序的各种原因。一旦您了解了这一点,也许您可以更具体地说明为什么您的应用需要关注这一点。您可能会找到更好的方法来处理您的特定问题,而无需关心谁或什么终止了事情——比如保存你的应用程序状态,在你的应用程序启动时调用它?
-
你想做什么? Alarmy 可能会按计划发布本地通知,就在它即将触发之前,如果应用程序仍在运行,则将其推迟。
标签: ios swift appdelegate uiscenedelegate