我有一个计时器应用程序,它计算的时间不确定(直到用户停止计时器)。它的工作原理非常类似于默认的iOS时钟秒表。
我读过关于做一个负责任的后台应用的文章。我没有任何UI更改发生,停止计时器时,应用程序在后台和恢复计时器时,回到前台。该应用程序每30分钟发出一次本地通知,提醒用户休息一下。
问题:我的应用程序在几个小时后( 2-6个小时左右)就被终止了,现在的计时器和信息都丢失了。
我尝试过的事情:
-As之前,我改变了我的应用程序,以遵循作为一个负责任的后台应用程序(在我有计时器UI计数和计时器运行之前,即使是在后台)。我认为这可以解决这个问题,因为我的应用程序没有消耗太多内存,也没有做任何密集的任务。
-I还尝试在ApplicationWillTerminate中保存当前计时器的数据(到NSUserDefaults),然后在DidFinishLaunchingWithOptions上恢复它。似乎不起作用。这几乎就像我的应用程序是强制退出什么的,因为如果调用ApplicationWillTerminate,它就会保存数据,并在应用程序再次启动时恢复数据。神秘感。
-Currently --我正在保存NSTimer在ApplicationDidEnterBackground上的启动时间的NSDate,使计时器无效,并启动计时器并在ApplicationWillEnterForeground上恢复开始时间。还是没有运气。
问题是,这只影响了我的一小部分用户--这并不是每个人都会遇到的问题,这会让人更加困惑。当然,我仍然想修复它,因为它是一个非常差劲的bug--我自己也遇到过它(在iPhone 5上),所以它不一定是一个旧的iPhone低内存的问题。
这确实让我感到困惑,我做了我的研究,也很好地研究了堆叠溢出的问题,而且似乎找不到什么可以帮助我的东西。
任何帮助都将不胜感激,随时问更多的问题或告诉我澄清。
发布于 2013-09-10 22:32:17
applicationWillTerminate基本上从来没有被调用过。它不会被调用,当你的应用程序在后台,它被从内存中删除。如果你的应用程序已经有一段时间没有使用了,你应该期待它被从内存中删除。“一段时间”取决于设备当时还在做什么。最好使用applicationDidEnterBackground:或applicationWillResignActive:。
发布于 2013-09-10 22:31:21
当您的应用程序进入后台,记录您的计时器的运行时间(例如:在NSUserDefaults或任何您喜欢的)。同时记录当前时间。当应用程序返回到前台时,请查看您记录的两个值,并相应地更新经过的时间,即:
elapsedTime = savedElapsedTime + (currentTime - timeWentIntoBackground)
没有理由让你的应用程序在后台保持活跃,只为了跟踪秒的流逝而烧掉用户的电池。
另外,不要依赖applicationWillTerminate。使用applicationWillEnterBackground。
https://stackoverflow.com/questions/18729754
复制相似问题