ios - ios 上的后台 http 请求为 "killed app"

标签 ios objective-c http background geolocation

我阅读了很多有关 iOS 背景知识的文章,但对于一个特定案例,我仍然无法理解概念。

当我的应用程序被 taskmanager(或由于内存压力而被 iOS 终止)并且发生重要的位置变化或地理围栏时,我的整个应用程序将由 iOS 启动并调用我的回调方法。

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

我的第二个也是主要问题是,如果当前互联网连接中断,我如何发送 http 请求并重新发送它们?

我尝试过使用 [NSThread sleepWithInterval]dispatchNSTimer。所有这些都有同样糟糕的结果:它在前台工作得很好,在正常背景(用户按下主页按钮)中也很好,但在上述状态下非常糟糕。如果它们运行得足够快,我可以发送多个 http 请求,但是当我需要几秒钟的 sleep 时,我会随机被杀死。当我使用延迟 2 秒的计时器时,我能够在应用程序的所有输出停止之前到达我的“重新发送 http 请求”方法 2-3 次。如果我使用我计划的 30 秒延迟,我什至一次都不会接到计时器调用。

最后一个问题是:我需要注册后台权限吗?我已经在用了

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

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

最佳答案

您可以通过调用来检查应用程序状态

[[UIApplication sharedApplication] applicationState]

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


如果您使用 NSURLSession 进行网络请求,您可以使用后台 session 配置来设置它。当您的应用程序处于后台时,这将允许系统处理网络请求,即使您的应用程序未运行也是如此。

关于ios - ios 上的后台 http 请求为 "killed app",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35729950/

相关文章:

ios - 如果应用程序处于后台状态并在本地化通知下启动,请在appdelegate中调用哪些方法

ios - 更新到 iOS 8 使我的 SpriteKit 游戏变得 super 慢

ios - 无法在 objective-c 中从 ejabberd xmpp 注册新用户

http - 在 HTTP 请求 URL 中嵌入原始 URL 中的查询参数的常见方法是什么?

javascript - 检测提交表单的 HTTP 204 状态

ios - 如何查询 Parse 以从自定义类获取信息并将其显示在 Swift 的文本字段中?

iOS:如何将文本从 UITextBox 保存到文件

ios - 如何仅在特定度数范围内为 UIView 的旋转设置动画?

objective-c - 在 objective-c 中创建 json 对象数组

json - HTTP 数据包中可以返回的数量是否有限制?或者这是 WCF JSON 限制?