詳細(xì)代碼,請戳這里
下面就是絮叨了一下思想,其實(shí)并沒有什么卵用。
斷點(diǎn)下載
暫停/繼續(xù)下載是現(xiàn)在下載中必備的功能了,如果沒有暫停功能,用戶體驗(yàn)相比會很差,而且如果突然網(wǎng)絡(luò)不好中斷了,沒有實(shí)現(xiàn)斷點(diǎn)下載的話只有重新下了。。。斷點(diǎn)下載的本質(zhì)就如上圖所示,就是記錄一下上次下載后的文件的字節(jié)總大小,在利用記錄的記錄總大小,傳給服務(wù)器。
關(guān)于單文件的斷點(diǎn)下載,博客上比比皆是,其中的詳細(xì)問題就不絮叨了。
下面我們談?wù)撘幌露辔募臄帱c(diǎn)下載,首先由一下問題要考慮:
1、多個任務(wù),如何控制
2、如何保證每一個下載任務(wù)在下載過程中沒有被銷毀
關(guān)于第一個問題
好多論壇,博客上面所說的下載類,在同一時(shí)間段內(nèi)下載一個文件還行,
但是,你要是下載多個任務(wù),一系列問題就迸發(fā)出來了,任務(wù)的取消和暫停此時(shí)怎么控制?怎么把有業(yè)務(wù)邏輯的任務(wù)和此時(shí)的下載任務(wù)一一對應(yīng)起來?
這時(shí),就應(yīng)該在這個下載類的上面再封裝一次,由這個上層類創(chuàng)造任務(wù),控制他們
關(guān)于第二個問題
上面的問題說到,創(chuàng)造一個上層類,我們都知道搞一個單例對象來實(shí)現(xiàn)這個實(shí)例不被銷毀
我們知道,對象不會銷毀,它的屬性也不會銷毀,所以在這個上層類中添加一個taskDict的字典屬性(/** 存儲下載的HFDownloader,因?yàn)閱蝹€任務(wù)對應(yīng)一個HFDownloader 的實(shí)例)這樣每一個下載任務(wù)就被保存了起來,而且可以隨時(shí)隨地的取出來進(jìn)行其他操作。
關(guān)于用法
-->1.在項(xiàng)目中導(dǎo)入HFDownloadManager.h頭文件;
-->2.搭建UI時(shí),設(shè)置顯示進(jìn)度的UIProgressView的進(jìn)度值:[[HFDownloadManager sharedManager] lastProgressWithUrl:url],
這個方法的返回值是float類型的;
設(shè)置顯示文件大小/文件總大小的Label的文字:[[HFDownloadManager sharedManager]fileSize:url];
-->3.開始或恢復(fù)下載任務(wù)的方法:[HFDownloadManager sharedManager] downloadWithUrlString:(NSString *)urlString
toPath:(NSString *)destinationPath
process:(ProcessHandle)process
completion:(CompletionHandle)completion
failure:(FailureHandle)failure];
這個方法包含三個回調(diào)代碼塊,分別是:
1)下載過程中的回調(diào)代碼塊,帶3個參數(shù):下載進(jìn)度參數(shù)progress,已下載文件大小sizeString,文件下載速度speedString;
2)下載成功回調(diào)的代碼塊,沒有參數(shù);
3)下載失敗的回調(diào)代碼塊,帶一個下載錯誤參數(shù)error。
-->4.在下載出錯的回調(diào)代碼塊中處理出錯信息。在出錯的回調(diào)代碼塊中或者暫停下載任務(wù)時(shí),
調(diào)用[[HFDownloadManager sharedManager] cancelDownloadTask:url]方法取消/暫停下載任務(wù);
-->5.如果在非下載界面監(jiān)聽下載進(jìn)去 注冊通知 監(jiān)聽 《HFProgressDidChangeNotificaiton》 返回參數(shù)里有一個字典,里面包含四個參數(shù) @{@"url":self.urlString, 請求下載的url
@"progress":@(progress), 下載進(jìn)度
@"sizeString":sizeString,下載的大小
@"speedString":speedString} 下載速度
-->6.徹底刪除下載任務(wù),就在把下載到內(nèi)存的文件也刪除
[[HFDownloadManager shredManager] removeForUrl:url file:destinationPath];
url 是下載的url地址
destinationPath 下載的文件存儲路徑
在這個manager中的cancleTask不是我們想象中的暫停,它是直接把任務(wù)取消了,因?yàn)?,我們每次請求下載任務(wù)的時(shí)候都已經(jīng)知道了這個文件已經(jīng)內(nèi)存中的位置和大小了。直接利用服務(wù)器開始新的下載就OK了。
更詳細(xì)的用法,在demo中都有代碼注釋。
如果你覺得有用,請給小子一個??。