在iOS中,我们都知道有AppDelegate方法
applicationWillTerminate
,当我的应用程序当前正在运行时(即不在后台)被用户关闭时,它会被调用。但是当我的应用程序在后台运行时终止(被用户关闭或被操作系统杀死)时,我想做一些事情(例如保存数据)。
PS:我的应用程序可以在后台运行。
你有什么解决办法吗?谢谢。
抱歉,但你应该使用
applicationWillTerminate
:
此方法让您的应用程序知道它即将终止并且 完全从记忆中清除。您应该使用此方法来执行任何 应用程序的最终清理任务,例如释放共享资源, 保存用户数据,并使计时器无效。您对此的实施 方法大约有五秒钟的时间来执行任何任务并返回。 如果该方法在时间到期之前没有返回,系统可能会kill 整个过程。
对于不支持后台执行或链接的应用程序 对于 iOS 3.x 或更早版本,当用户 退出应用程序。 对于支持后台执行的应用程序, 此方法 当用户退出应用程序时通常不会调用,因为应用程序 在这种情况下,只需移至后台即可。然而,该方法可能 在应用程序在后台运行的情况下调用 (未暂停)并且系统因某种原因需要终止它。
因此,如果您还需要在用户手动终止应用程序时保存数据,请使用
applicationDidEnterBackground
,如果您的应用程序支持后台模式,则会调用它。
如果您需要在应用程序未运行时执行代码,有 根据您想要做什么,有多种选择可供您选择。
- 后台获取将使您的应用程序按计划的时间间隔在后台运行约 30 秒。这样做的目的是获取数据 并为应用程序下次运行时准备 UI。
- 推送通知让您的应用程序可以从服务器获取新数据。如果需要,您可以在设备上显示一条消息,但事实并非如此 必需 – 无声推送通知让您可以跳过该部分。
- 本地通知可让您向用户显示警报,以及您想要的任何媒体附件以及供用户选择的一些选项 从中选择。如果他们选择这些选项,那么您的应用程序可以 在前台或后台启动来处理它们。
来自: https://www.hackingwithswift.com/example-code/system/how-to-run-code-when-your-app-is-termerated
您还可以使用无声推送通知 正如我在类似问题中提到的:https://stackoverflow.com/a/57245980/6157415
我成功使用了appWillResignActive