我制作了一个需要每1分钟将位置和状态更新发送到服务器的应用程序。我尝试了以下方法,但是没有一个方法可以帮助我。有什么解决办法吗?
1- NSTimer-许多人建议这样做。但是问题出在backgroundMode上,并且只能工作20分钟。该应用程序停止发送数据之后。
2- BackgroundFetchMode-开始时看起来像是正确的解决方案。但是此功能不能保证每1分钟运行一次应用程序。它具有iOS决定应运行哪个应用程序的算法。
该API与计时器任务不同,系统会根据许多限制决定何时调用处理程序。因此,如果将timeInterval设置为2.00f(2secs),则每2+(最小)秒调用一次处理程序。
3- LocationUpdate-同样,这种方式也不起作用,因为它仅在您移动至少500米时才运行您的应用程序。
当设备距其先前的通知500米或更多距离时,应用程序会期望收到通知。它不应期望通知的频率超过每五分钟一次。如果设备能够从网络检索数据,则位置管理器更有可能及时传递通知。
4-推送通知-在用这种方法发表的文章中,您可以在定义的时间内运行应用程序,确实可以!
您可以在定义的时间表时间内安排通知。但问题是向用户显示通知。我需要在背景中保持沉默。
另外,您不能每1分钟运行一些代码。它只是向用户显示通知。并且用户应点击您的通知,然后didReceiveLocalNotification可用,您可以运行代码。
如Apple在其文档中所述:
在iOS中,只允许特定的应用类型在后台运行:
- 在后台播放可听内容的应用程序,例如音乐播放器应用程序
- 在后台录制音频内容的应用
- 始终让用户了解其位置的应用程序,例如导航应用程序
- 支持互联网协议语音(VoIP)的应用
- 需要定期下载和处理新内容的应用
- 从外部配件接收定期更新的应用
实现这些服务的应用必须声明它们支持的服务,并使用系统框架来实现这些服务的相关方面。声明服务可使系统知道您使用的服务,但在某些情况下,实际上是系统框架阻止了应用程序被挂起。
您可以在链接中阅读有关实现和声明这些后台任务的所有信息。但是,如果您的应用程序是另一种类型的应用程序,或者您无法使用系统框架,则您的应用程序将无法无限期地在后台运行。即使是这样,您也应该始终希望系统出于某种原因(例如重新启动手机)而停止任务。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句