我有一個支持將內容下載到本地磁盤的應用程序。 用戶可以選擇他們想要保存的項目。下載完成後,我將解壓下載的文件並加密,然後保存到本地。我用NSURLSession與backgroundConfiguration來支持後臺下載。我希望用戶儘快訪問下載的內容,因此我實現了自己的隊列來處理下載項目。我希望下載機制可以在前臺和後臺都能工作。這裏有一些機制及其結果ios URLSession後臺下載FIFO機制
- 方法1:
首先創建每個下載任務,以及排隊對象
downloadObj.downloadTask = [session downloadTaskWithRequest:request];
downloadObj.taskIdentifier = downloadObj.downloadTask.taskIdentifier;
[Queue enqueue:downloadObj];
過程中頭部對象在隊列
obj = [Queue objectAtIndex:0];
[obj.downloadTask resume];
手柄下一個對象在URLSession委託功能
-(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)downloadURL {
finishObj = [Queue findObjFromIdentifier:downloadTask.taskIdentifier];
nextObj = [Queue findNextObj:finishObj];
[nextObj.downloadTask resume];
[Queue removeObject:finishObj];
}
這種方法可以正常工作,當應用程序總是在前臺。當應用程序進入後臺時,所有創建的downloadTasks似乎會自動恢復。 所以他們會同時分享帶寬。 它不遵循先進先出 ....
- 方法2:
創建URLSession委託功能下載任務,並直接恢復
這種方法僅下載當應用已經進入後臺時運行的下載任務。
任何人都可以給我講述了背景與先進先出產權一些建議?
我們有同樣的問題。你有沒有找到解決方案? –