我制作了一个应用程序,需要每 1 分钟向服务器发送一次位置和状态更新。
我尝试了以下方法,但没有一个能帮助我。有什么解决办法吗?
1 - NSTimer- 很多人建议这样做。但问题出在后台模式上,它只能工作 20 分钟。该应用程序停止发送数据后。
2 - 背景获取模式- 一开始看起来像是正确的解决方案。但这种能力并不能保证每 1 分钟运行一次应用程序。它有一个算法,iOS 决定应该运行哪个应用程序。
这个API不像定时器任务,系统会决定何时调用
处理程序取决于许多约束。因此,如果将 timeInterval 设置为
2.00f(2秒),每 2+(最小)秒调用一次处理程序。
3 - 位置更新- 同样,这种方式不起作用,因为它仅在您移动至少 500 米时运行您的应用程序。
一旦设备移动 500 米,应用程序就会收到通知
或之前通知中的更多内容。不应该期待
通知的频率超过每五分钟一次。如果
设备能够从网络、位置管理器检索数据
更有可能及时发送通知。
4 - 推送通知- 在一篇文章中说,通过这种方法,您可以在定义的时间内运行应用程序,而且确实如此!
您可以在定义的计划时间内安排通知。但问题是向用户显示通知。我需要在后台保持安静。
另外,您不能每 1 分钟运行一些代码。它只是向用户显示通知。用户应该点击您的通知,然后点击 didReceiveLocalNotification
可以使用并且您可以运行代码。
正如苹果公司在他们的声明中所说文档 https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html#//apple_ref/doc/uid/TP40007072-CH4-SW4:
在 iOS 中,只允许特定的应用程序类型在后台运行:
- 在后台向用户播放音频内容的应用程序,例如音乐播放器应用程序
- 在后台录制音频内容的应用程序
- 让用户随时了解其位置的应用程序,例如导航应用程序
- 支持互联网语音协议 (VoIP) 的应用
- 需要定期下载和处理新内容的应用
- 从外部配件接收定期更新的应用程序
实现这些服务的应用程序必须声明它们的服务
支持和使用系统框架来实施相关方面
那些服务。声明服务让系统知道哪些服务
您使用的服务,但在某些情况下是系统框架
实际上可以防止您的应用程序被暂停。
您可以在链接中阅读有关实现和声明这些后台任务的所有内容。但是,如果你的App是其他类型的,或者你无法使用系统框架,那么你的App就没有办法无限期地在后台运行。即使是这样,您也应该始终预期系统会因某种原因停止您的任务(例如重新启动手机)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)