我需要按顺序下载多个文件。我还希望将来有可能在每次下载之间设置一个时间间隔,以减少服务器负载(我正在从 OpenStreetMap 下载图块)。此下载必须能够在后台运行。
我目前正在这样做:
let config:URLSessionConfiguration = URLSessionConfiguration.background(withIdentifier:"offline-map-download");
config.sessionSendsLaunchEvents = true;
config.isDiscretionary = true;
let queue:OperationQueue = OperationQueue();
queue.name = "download";
queue.maxConcurrentOperationCount = 1;
let session = URLSession(configuration:config, delegate:self, delegateQueue:queue);
for i in 0 ..< 10 {
let url:URL = URL(string:"http://tile.openstreetmap.org/7/63/\(i).png")!;
print("add \(url) to queue");
session.dataTask(with:url).resume();
}
这是我的委托的 didCompleteWithError 方法:
public func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) {
print("received \(task.currentRequest!.url!)");
}
我希望“收到”日志的打印顺序与“添加到队列”日志的顺序相同。事实并非如此。正常吗?
更一般地说,我是否在正确的路径上进行后台下载(相当于 Android 服务)?现在我没有真正的设备,我正在使用模拟器。当我按下主页按钮时,我的应用程序是否在后台运行(问这个是因为即使我使用 URLSessionConfiguration.default 配置,当我按下主页时,我的下载也会继续)?