[英]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.