在ios上为“杀死的应用程序”提供背景http请求

时间:2016-03-01 17:55:09

标签: ios objective-c http background geolocation

我阅读了很多关于iOS背景知识的内容,但我仍然对一个特定案例的概念有所了解。

当我的应用程序被taskmanager(或由于内存压力而被iOS)杀死并且发生了一个significantLocationChange或GeoFence时,我的整个应用程序都是由iOS启动的,并调用了我的回调方法。

这里的第一个问题是:我处于什么状态?即使UI部分加载,所以我有点前景,但由于显示器上没有任何内容,我认为它是背景。

我的第二个主要问题是,如果互联网连接目前停止,我该如何发送http请求并重新发送?

我尝试使用[NSThread sleepWithInterval]dispatch延迟和NSTimer。所有这些都有相同的不良结果:它在前景中效果很好,在NORMAL背景中很好(用户按下homebutton)但在上述状态下非常糟糕。我能够发送多个http请求,如果它们运行得足够快,但是当我需要几秒钟的睡眠时,我会被随机杀死。当我使用具有2秒延迟的定时器时,我能够达到我的“重新发送http请求”方法2-3次bevor应用程序的所有输出停止。如果我使用计划的30秒延迟,我甚至不会接到一次定时器调用。

所以最后一个问题是:我是否需要注册后台许可?我已经使用

<key>UIBackgroundModes</key>
<array>
   <string>location</string>
</array>

或者使用NSOperationQueue会有帮助吗?它是否具有我没有的特殊权限?

1 个答案:

答案 0 :(得分:1)

您可以通过调用

来检查应用程序状态
[[UIApplication sharedApplication] applicationState]

在您的情况下,它应该是UIApplicationStateBackground

如果您使用NSURLSession进行网络请求,则可以使用后台会话配置进行设置。当您的应用在后台时,即使您的应用未运行,也可以让系统处理网络请求。