ios - iOS 应用程序保证在后台停留多长时间而不被从内存中删除?

标签 ios memory-management background viewcontroller

我有一个 Swift iOS 应用程序,由 3 个 View Controller 组成——第一个带有 tableview,第二个带有所选元素和创建新时间 session 的能力,第三个带有 session 的实际计时器(让我们称它为计时器 vc)。

在这种情况下,焦点是计时器 View Controller 。但是,问题不在于计时器本身。它适用于前台和后台模式。问题是这样的:

应用进入后台。然后在某个固定的时间段内,它会收到一个本地通知——提醒返回定时器 vc 并保存结果。大多数时候,它工作正常,但有时当您返回应用程序时(通过通知),它会使用 tableview 而不是计时器 vc 打开初始 vc,这似乎是系统在一段时间后终止了后台应用程序然后当您返回通知时重新打开它。在这种情况下,来自计时器 vc 的所有数据显然都丢失了,因为应用程序逻辑要求用户在 session 结束后保存数据。

我认为,问题的本质可能与应用程序可以在后台停留多长时间而不会被终止或暂停有关(如果我没记错的话,在这种状态下,与应用程序已从内存中删除)。我的意思是,当您将通知设置为每 1、5 或 10 分钟触发一次时,一切似乎都很好。但是,当通知设置为 30 分钟或更长时间时,提到的错误似乎会不时出现(尤其是在实际设备而不是模拟器上进行测试时)。在大多数情况下,如果设备存储空间几乎已满 - 低于 1Gb 的可用空间,就会出现。这让我相信这也可能是内存管理问题。

如何让这个计时器 vc 在后台运行所需的时间?另外,有人知道 iOS 应用程序保证在后台停留多长时间而不被从内存中删除吗?非常感谢。

最佳答案

无法保证您的应用程序在后台模式下的执行时间。操作系统可以随时暂停它,操作系统只负责通知您的应用程序,您将在应用委托(delegate)。

要设置本地通知,您只需要从操作系统获得帮助。您不能依赖应用程序在后台线程中的执行。要安排和处理本地通知,您可以阅读以下文档。

https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/SchedulingandHandlingLocalNotifications.html#//apple_ref/doc/uid/TP40008194-CH5-SW1

关于ios - iOS 应用程序保证在后台停留多长时间而不被从内存中删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49650079/

相关文章:

ios - 如何从Apple的QuickLook链接方案 "x-apple-ql-magic"下载?

c - 函数调用期间的内存管理

android - 如何通过任何文件资源管理器更改图像背景

Android:如何使用聚焦状态的按下状态绘制 ImageButton

cocoa - 具有 "copy"属性的 NSURL 属性。漏水了吗?

jquery - 如何在刷新时更改背景?

ios - 验证 iOS 应用程序上传的警告和错误

ios - SwiftUI - 列表编辑模式 - 如何更改删除按钮标题?

ios - 通过字符串运行一堆方法并接收一个值

javascript - 如何解释 Chrome 的内存分析结果?