[問題] 背景下載

作者: kuokuo321 (kuokuo)   2016-01-27 12:33:03
我現在用NSURLSession 裡的 NSURLSessionDownloadTask來實作背景下載
因為下載的檔案有點大,又希望使用者可以儘早的看到下載完的檔案內容
所以另外做了一個Queue去maintain下載順序,希望頻寬都用在一個檔案上
做法就是先把downloadTask new出來([session downloadTaskWithRequest:request])
然後在 didFinishDownloadingToURL 裡讓下一個downloadTask resume
這個做法在前景執行的時候看起來很正常
但放到背景之後 所有被new出來的downloadTask似乎會開始一起佔用頻寬
所以下載完成的時間會差不多.....
我希望他到背景執行的時候還是可以維持FIFO的模式(像KKBox的下載佇列一樣)
另外我有試過在didFinishDownloadingToURL中才new下一個downloadTask
可是在進入背景後 我的寫法看來只會確保進入前new出的downloadTask被執行完
當我有多個大檔案要下載就會很容易出現只載好第一個的狀況
想請問各位前輩有什麼建議呢?
作者: darktt (小朱)   2016-01-27 13:28:00
你的Configuration要改成backgroundSessionConfigurationWithIdentifier
作者: kuokuo321 (kuokuo)   2016-01-27 13:59:00
在建session的時候有用backgroundSessionConfigurationHTTPConnectionPerHost也設成 1不過來源不一定是同一個Host
作者: springgo (...)   2016-01-27 21:25:00
可以用NSOerationQueue去控制你的download task打錯字了 是NSOperationQueue
作者: uranusjr (←這人是超級笨蛋)   2016-01-28 14:41:00
還有一個方法是用 GCD 開個共用 queue 然後設成 serial奇怪我記得這很久之前有討論過, 但找了很久找不到, 算了
作者: vampirewalk (vampire)   2016-01-28 15:46:00
設 queue.maxConcurrentOperationCount=1 ?

Links booklink

Contact Us: admin [ a t ] ucptt.com