我希望在以下条件下从iOS应用上传和下载服务器中的大文件。
1)如果我的应用程序进入后台,它应该执行上传和下载。
2)如果我丢失了连接,那么它应该停止任何渐进式上传和下载,然后可以从它停止的地方恢复。
3)如果我从托盘关闭应用程序,那么当应用程序重新启动时,它将在第二点跟随相同的步骤。
我真的想知道这可能是NSURLConnection
吗?
我非常了解 ASIHttpRequest 和 AFNetworking 库,我不想使用任何外部库而是想使用默认的NSURLConnection
类同样的。
如果其连接是持久的并且应用程序在后台运行,我可以使用
NSURLConnection
下载和上传。
我在第三种情况下想到了以下想法:
如果应用程序将要终止,我将需要在某处存储上传或下载进度,以便下次我需要发送“范围”以继续下载。
但我不确定服务器会如何自行处理?如何为此配置服务器?如何为此配置webservice?有什么想法吗?
答案 0 :(得分:0)
自iOS5
以来,您可以在此类情况下请求您的申请额外一些时间。通常大约需要10分钟,但可以根据操作系统的需要进行更改。为了在你的appDelegate willResignActive中实现这个:
UIBackgroundTaskIdentifier backGroundTask = 0;
backGroundTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
//time span give expired and the download is not finished
}];
//once the download is finished inside the time span given
[[UIApplication sharedApplication] endBackgroundTask:backGroundTask];
如果您只支持iOS7
,则现在可以使用NSURLSession
代替NSURLConnection
。 NSURLSession
可以管理完整的停止和恢复,以及在后台管理应用程序的长时间下载,根据设备的无线/单元活动做出明智的决定,以便不会耗尽用户电池(什么是知道节流)
您可以在https://developer.apple.com/library/ios/documentation/Foundation/Reference/NSURLSession_class/Introduction/Introduction.html上找到有关NSURLSession
的更多信息
Matt Thompson的另一篇有趣的文章可以在这里找到 -
http://www.objc.io/issue-5/from-nsurlconnection-to-nsurlsession.html
还可以在UIBackgroundTaskIdentifier
上找到更多信息 - https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIApplication_Class/