繁体   English   中英

后台http在ios上请求“被杀死的应用”

[英]background http requests on ios for “killed app”

我阅读了很多有关iOS背景知识的信息,但是在了解特定情况下的概念时仍然遇到问题

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

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

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

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

因此,最后一个问题是:我需要注册具有背景许可吗? 我已经用过

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

还是使用NSOperationQueue有帮助? 它具有我没有的特殊权限吗?

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

[[UIApplication sharedApplication] applicationState]

在您的情况下,应为UIApplicationStateBackground


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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM