NSTimer在一段时间后在后台停止

8

当应用程序进入后台并且经过约1秒钟后,我使用NSTimer调用一个方法,但是在大约17分钟后计时器停止工作。

当应用程序回到前台时,计时器重新开始工作。请告诉我为什么会发生这种情况,以及如何解决该问题。

我还尝试使用延迟递归中的perform selector来实现相同的目的,但结果仍然相同。请提供任何解决方案。非常感谢您的帮助。


计时器有什么作用?我的意思是,它是否是苹果允许的后台任务之一? - jcesarmobile
你在构建目标属性中设置了哪些“所需的后台模式”? - John Parker
我已经在我的“必需后台模式”中添加了“应用程序注册位置更新”。 - Himanshu
请建议我如何完成这个任务。感谢您提供的任何帮助。 - Himanshu
3个回答

6

奇怪的问题-我也遇到过这个问题,但是以下方法对我有效。

 //Run the timer on the runloop to ensure that it works when app is in background

  [[NSRunLoop currentRunLoop]addTimer:self.timer forMode: NSDefaultRunLoopMode];

1
我已经使用了这个,但是在后台定时器仍然在接近16分钟后停止。 - Himanshu
请查看此链接并告诉我是否有效。http://stackoverflow.com/questions/8449351/iphone-4-is-there-an-absolutely-certain-way-to-have-a-long-term-nstimer-fire?rq=1 - Xcoder
Runloop在设备上无法工作。你有什么想法为什么它不工作吗? - Yuvrajsinh Vala

5

实现长时间运行的后台任务

对于需要更多执行时间来实现的任务,您必须请求特定权限以在不被暂停的情况下在后台运行。在iOS中,只允许特定类型的应用在后台运行:

  • 在后台播放声音内容的应用,例如音乐播放器应用
  • 一直保持用户位置信息的应用,例如导航应用
  • 支持VoIP的应用
  • 需要下载和处理新内容的杂志应用
  • 从外部附件接收定期更新的应用

0
如果只有几分钟的话,你不能让应用在后台无限运行除非它使用以下功能:
  • 音频播放
  • 位置服务
  • 外部附件

对于所有其他应用程序,您可以使用后台任务来获得10分钟的运行时间,或使用本地通知来通知用户。


我正在使用后台模式的位置服务,但计时器仍然停止。 - Himanshu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接