5

我想在以下情况下从 iOS 应用程序向服务器上传和下载大文件。

1)如果我的应用程序进入后台,它应该执行上传和下载。

2)如果我失去了连接,那么它应该停止任何渐进式上传和下载,然后可以从它停止的地方恢复。

3)如果我从托盘关闭应用程序,那么当应用程序重新启动时,它会在第二点遵循相同的操作。

我真的很想知道这可能NSURLConnection吗?

我非常了解ASIHttpRequestAFNetworking库,我不想使用任何外部库,而是想使用NSURLConnection相同的默认类。

NSURLConnection如果它的连接是持久的并且应用程序在后台运行,我可以下载和上传。

对于第三种情况,我有以下想法:

如果应用程序将要终止,我需要在某处存储上传或下载进度,以便下次我需要发送“范围”以继续下载。

但我不确定它自己的服务器将如何处理?如何为此配置服务器?如何为此配置网络服务?有任何想法吗?

4

1 回答 1

1

因为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,您现在可以使用 ofNSURLSession而不是NSURLConnection. NSURLSession可以管理完全停止和恢复以及在后台使用应用程序管理长时间下载,根据设备的无线/蜂窝活动做出明智的决定,以免耗尽用户电池(所谓的节流)。
你可以找到更多关于NSURLSession- https://developer.apple.com/library/ios/documentation/Foundation/Reference/NSURLSession_class/Introduction/Introduction.html
可以在这里找到马特汤普森的另一篇有趣的文章 - http://www .objc.io/issue-5/from-nsurlconnection-to-nsurlsession.html
还可以找到更多UIBackgroundTaskIdentifier关于 -https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIApplication_Class/

于 2013-10-16T14:37:45.533 回答