如何为启用了后台的 iOS 应用程序获取 applicationWillTerminate 通知?

Posted

技术标签:

【中文标题】如何为启用了后台的 iOS 应用程序获取 applicationWillTerminate 通知?【英文标题】:How to get applicationWillTerminate Notification for an iOS App that has Backgrounding Enabled? 【发布时间】:2013-01-02 21:52:30 【问题描述】:

所以我知道,如果您的应用支持后台执行,则不会调用 applicationWillTerminate:(除非存在一些内存问题),而是调用 applicationDidEnterBackground:

在 appDelegate 的 applicationDidEnterBackground: 方法内部,它说

// If your application supports background execution, 
//this method is called instead of applicationWillTerminate: when the user quits.

但是,当用户实际退出应用程序时,我需要将一些条目保存到字典中。我不想每次应用程序进入后台时都这样做。即使我的应用支持后台,有没有办法获得终止通知?

特别是如果应用程序被用户强制退出,有什么解决方法可以得到通知?

【问题讨论】:

用户永远不会退出支持后台执行的应用程序。该应用程序只需进入后台。该应用程序可能会在操作系统的后台被杀死,但这不是用户操作。为什么每次应用进入后台时都不想保存数据?这是你唯一的选择。 这是一个与外部蓝牙设备交互的应用程序。如果用户强制杀死该应用程序,我的印象是它不再在后台。不是这样吗? 这是真的。如果用户强制终止应用程序,那么您的应用程序不会收到任何有关它被终止的通知。 @maddy 编辑:纳米,你回答了我的问题。我强调的是强制退出问题 @rmaddy 我不确定这是否正确,至少现在不再正确。我使用后台位置,让它们在后台运行良好(在控制台中查看)...然后我使用应用程序切换器将其杀死...我仍然收到 applicationWillTerminate: 通知。 【参考方案1】:

每次应用进入后台时保存。操作系统可能会在没有任何进一步警告的情况下杀死你。

【讨论】:

这是我的情况:应用程序连接到外部蓝牙设备。如果应用程序被终止,蓝牙连接将被终止,当应用程序恢复时,我需要将此事实保存为 ui 内容。但是,如果应用程序只是后台运行,蓝牙连接仍然存在,我不需要保存任何内容。您对如何解决这个问题有任何想法吗? 当应用程序恢复时,您看不到它是否仍然启动?例如类似 if(connection.isValid) ... else ... 在您恢复应用程序后需要几秒钟才能重新连接。所以基本上我需要将 UI 更新为这个事实,但我不想在 UI 进入后台时更新它(仅在它终止时)。

以上是关于如何为启用了后台的 iOS 应用程序获取 applicationWillTerminate 通知?的主要内容,如果未能解决你的问题,请参考以下文章

如何为 iOS 版本 9 + 10(可能还有 8)实现 Apple 推送通知?

如何为使用 Xamarin 构建的 iOS 应用启用堆栈粉碎保护?

如何为所有单元格启用编辑模式,而不仅仅是可见单元格

如何为 iOS 项目创建类引用,如 NSDictionary 类引用 - Apple Developer

如何为 Apple 的大图像缩小 iOS 示例设置最大缩放限制?

如何为 Apple Watch 配置本地通知