iphone - 如何防止我的计时器应用程序被 iOS 终止

标签 iphone ios objective-c nstimer multitasking

我有一个计时器应用程序,它会无限期地计时(直到用户停止计时器)。它的工作原理与默认的 iOS 时钟秒表非常相似。

我已阅读有关成为负责任的后台应用程序的文章。我没有发生任何 UI 更改,并且当应用程序进入后台时停止计时器,并在返回前台时恢复计时器。该应用确实每 30 分钟左右发送一次本地通知,提醒用户休息一下。

问题:我的应用程序肯定会在几个小时(2-6 个小时左右)后终止,并且当前计时器和信息都会丢失。

我尝试过的事情:

-如上所述,我更改了我的应用程序,以遵循成为负责任的后台应用程序的准则(在我让计时器 UI 计数并且计时器运行之前,即使在后台也是如此)。我认为这可以解决问题,因为我的应用程序没有占用太多内存或执行任何密集型任务。

-我还尝试在 ApplicationWillTerminate 中保存当前计时器的数据(到 NSUserDefaults),然后在 DidFinishLaunchingWithOptions 上恢复它。这似乎不起作用。这几乎就像我的应用程序被强制退出或其他什么,因为如果调用 ApplicationWillTerminate 那么它将保存数据并在应用程序再次启动时恢复它。神秘。

- 目前,我正在 ApplicationDidEnterBackground 上保存 NSTimer 开始时间的 NSDate,使计时器无效,并在 ApplicationWillEnterForeground 上启动计时器并恢复开始时间。还是没有运气。

问题是,这影响了我的一小部分用户——所以这并不是每个人都面临的问题,这使得它更加令人困惑。当然,我仍然想修复它,因为这是一个非常蹩脚的错误 - 而且我自己也遇到过它(在 iPhone 5 上),所以它不一定是旧 iPhone 内存不足或其他问题。

这真的让我感到困惑,我已经完成了研究,也很好地搜索了堆栈溢出问题,但似乎没有找到任何可以帮助我的东西。

如有任何帮助,我们将不胜感激,请随时提出更多问题或告诉我进行澄清。

最佳答案

applicationWillTerminate 基本上从未被调用。当您的应用程序在后台运行并且从内存中删除时,它不会被调用。如果您的应用程序有一段时间没有使用,您应该预料到它会从内存中删除。 “一段时间”有多长取决于设备当时正在做什么...最好使用 applicationDidEnterBackground:applicationWillResignActive:

关于iphone - 如何防止我的计时器应用程序被 iOS 终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18729754/

相关文章:

ios - 创建一个最喜欢的按钮,快速连接到最喜欢的表格 View

ios - 在 UIScrollView 内滚动时,调整大小的 UIWebView 返回到原始大小

ios - 将 AFNetworking 添加到新项目时出现错误

objective-c - 在 Objective c 中公开/合成 iVar 属性

objective-c - 为什么我总是得到相同的随机值?

iphone - 任何自动布局大师能够启发我有关约束和旋转的知识吗?

iphone - Xcode 4 中的压缩应用程序 (.ipa) 比 Xcode 3 大吗?

iphone - 逻辑单元测试崩溃

iOS 5 不在 Xcode 中?

iphone - 在将对象传递给 -performSelector :withObject:afterDelay:? 之前我是否必须保留该对象