2013-09-10 58 views
2

我有一个计时器应用程序,它计数无限期的时间(直到用户停止计时器)。它非常像默认的iOS时钟秒表。如何防止我的计时器应用被iOS终止

我已阅读有关作为负责任的后台应用程序的文章。我没有任何UI变化发生,当应用程序在后台运行时停止计时器,并在返回到前台时恢复计时器。该应用每隔30分钟发送一次本地通知以提醒用户休息一下。

问题:没有失败我的应用程序几个小时后(2-6小时左右)终止,当前计时器和信息丢失。

事情我已经尝试:

-As上述我改变了我的应用程序遵循的是一个负责任的后台程序(之前,我有定时器计数UI起来也定时器运行,即使在后台准则)。我认为这会解决问题,因为我的应用程序没有使用太多内存或执行任何密集型任务。

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

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

事情是这影响到我的用户的一小部分 - 所以它不像它是每个人的问题,这使得它更容易混淆。当然,我仍然想要修复它,因为这是一个非常蹩脚的错误 - 我自己也遇到了它(在iPhone 5上),所以它不一定是旧的iPhone低内存或其他问题。

这真让我非常吃惊,我已经完成了我的研究,并且也很好地搜索了堆栈溢出问题,并且似乎找不到任何帮助我的东西。

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

+0

为什么操作系统杀死你的应用程序很重要?您可以在应用程序运行时安排本地通知,用户仍然可以看到这些通知。正如您现在所做的那样,您可以节省开始时间。如果用户没有使用您的应用程序,则无需使用空间和电源就可以坐在后台。 – Caleb

+0

因为当用户输入应用程序时,我希望他们查看自启动以来应用程序的运行时间以及应用程序死机时信息丢失的时间。我认为问题是(正如Wain指出的那样)ApplicationWillTerminate没有被调用 - 所以信息不会被保存。我正在测试,以确保尽管。我仍然觉得很奇怪,尽管在几个小时后我的应用程序被杀死了,特别是因为我在后台没有任何事情发生。 – LazerLex

回答

2

applicationWillTerminate基本上不会被调用。当你的应用程序在后台并且它从内存中移除时它不会被调用。如果您的应用程序暂时未使用,您应该期望您的应用程序从内存中移除。 “一段时间”的时间长短取决于设备当时在做什么......最好使用applicationDidEnterBackground:applicationWillResignActive:

+0

有关applicationWillTerminate的信息不会被调用。事情是我将数据保存在applicationDidEnterBackground(定时器的开始时间的NSDate)中,然后在ApplicationWillEnterForeground上恢复。仍然没有运气。 App仍然会被杀死,就好像它是一个内存密集型应用程序。 – LazerLex

+1

你必须期待它被'杀死'(从内存中删除)。如果要保存并正确恢复,它在恢复操作时不应该有所作为。 – Wain

+0

所以当你说“保存和恢复正确”,你的意思是保存到NSUserDefaults(像我试过),并恢复ApplicationDidFinishLaunchingWithOptions上的值?或者你的意思是国家保存? – LazerLex

2

当你的应用进入后台时,记录你的计时器的经过时间(例如:在NSUserDefaults中,或者你喜欢)。同时记录当前时间。当应用程序回来到前台,看你记录的两个值,并相应地更新所经过的时间,即:

elapsedTime = savedElapsedTime +(currentTime的 - timeWentIntoBackground)

确实没有理由您的应用需要在后台保持激活状态,燃烧用户的电池只是为了跟踪时间。

另外,不要依赖applicationWillTerminate。使用applicationWillEnterBackground。

+0

所以我实际上正在做这件事,我的应用程序在几个小时后仍然死亡。我没有在后台执行任何任务(除了正在发送的那些UILocalNotifications)。 – LazerLex

相关问题