在 iPhone 后台使用 http 请求下载文件(iOS 4.0 以上)

Posted

技术标签:

【中文标题】在 iPhone 后台使用 http 请求下载文件(iOS 4.0 以上)【英文标题】:download files using http request in background in iPhone (above iOS 4.0) 【发布时间】:2013-02-12 09:07:27 【问题描述】:

我是 ios 新手。 我想知道我的应用程序的一些基本需求是否可能? “当我的应用程序启动时(点击我的应用程序图标),应用程序应该从服务器下载大约 5-10 个文件。如果按下“主页”按钮,它也应该在后台继续下载。我的应用程序具有重试逻辑,即如果服务器是无法访问并发生请求超时,然后应用程序将等待一段时间并一次又一次地发送请求,直到下载完成。” 有可能吗?

【问题讨论】:

一切皆有可能,只需使用 github 上的 AFNetworking 库即可。它会让你很容易。但是,对于长时间运行的后台进程,它无法超过 10 分钟的操作系统限制。 我对 beginBackgroundTask 有同样的疑问。我需要在 10 分钟后继续重试。也。 运气不好,过了这么久你就不能继续尝试了。 【参考方案1】:

所以你应该做的是在应用程序委托中做一个didFinishLaunchingWithOptions:,你要求它发出一个nsurlrequest(或来自开源框架的类似东西)。此外,自己编写重试逻辑并不难。一种常见的方法是指数退避,这意味着您等待 2、4、8、16 等毫秒,然后在某个时间点,如果服务器看起来确实关闭了一段时间(如果您达到某个退避,停止尝试)。

当应用程序进入后台时处理它,这也在应用程序委托中。

【讨论】:

我已经在 didFinishLaunchingWithOptions 中使用 nsurlrequest 发送了 http 请求,并且还实现了重试逻辑。但是按下主页按钮后应用程序没有继续下载文件。那么我需要做什么才能继续在后台下载? beginBackgroundTaskWithExpirationHandler: 方法给出了有限的时间。 是的,我认为你不能在 10 分钟后继续前进。

以上是关于在 iPhone 后台使用 http 请求下载文件(iOS 4.0 以上)的主要内容,如果未能解决你的问题,请参考以下文章

仅在iPhone上获取HTTP标头字段

iOS NSURLSession 实现网络请求-文件下载-上传-后台下载

iOS NSURLSession 实现网络请求-文件下载-上传-后台下载

使用Charles对iPhone进行Http(s)请求拦截(抓包)

nodejs请求静态资源404错误,后台需处理返回http请求的静态资源

Ajax请求导出Excel的问题