0

我正在开发一个必须下载多个文件的应用程序。当应用程序在前台时我没有问题。
要在应用程序处于后台时继续下载,我使用以下代码(来自应用程序不活动时的 iOS 后台下载):

    self.backgroundTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
            [[UIApplication sharedApplication] endBackgroundTask:self.backgroundTask];
            self.backgroundTask = UIBackgroundTaskInvalid;
        }];
        /* 这里是你下载的代码,比如getDataFromServer方法 */

        [self getDataFromServer]; // 它的虚拟方法

        /* 你下载的代码在这里结束 */

        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

            [[UIApplication sharedApplication] endBackgroundTask:self.backgroundTask];
            self.backgroundTask = UIBackgroundTaskInvalid;
        });

在设备屏幕打开之前,此代码是可以的。但是当设备进入待机状态时,会发生一些事情并且下载停止。可能 ios 关闭了我的后台进程的活动互联网连接。

IOS 6 和 7 中是否有办法在待机期间保持连接处于活动状态?

4

1 回答 1

2

beginBackgroundTaskWithExpirationHandler将只允许大约 10 分钟的后台时间来完成长时间运行的进程,例如将大量用户数据保存到磁盘。这不应该用于文件下载,在后台下载文件的推荐方法是使用NSURLSessionNSURLSessionDownloadTask.

于 2014-10-06T14:50:09.690 回答