詳細(xì)代碼,請戳這里
下面就是絮叨了一下思想玫膀,其實并沒有什么卵用胳泉。
斷點下載
暫停/繼續(xù)下載是現(xiàn)在下載中必備的功能了颗胡,如果沒有暫停功能八回,用戶體驗相比會很差酷愧,而且如果突然網(wǎng)絡(luò)不好中斷了,沒有實現(xiàn)斷點下載的話只有重新下了缠诅。溶浴。。斷點下載的本質(zhì)就如上圖所示管引,就是記錄一下上次下載后的文件的字節(jié)總大小士败,在利用記錄的記錄總大小,傳給服務(wù)器汉匙。
關(guān)于單文件的斷點下載拱烁,博客上比比皆是生蚁,其中的詳細(xì)問題就不絮叨了。
下面我們談?wù)撘幌露辔募臄帱c下載戏自,首先由一下問題要考慮:
1邦投、多個任務(wù),如何控制
2擅笔、如何保證每一個下載任務(wù)在下載過程中沒有被銷毀
關(guān)于第一個問題
好多論壇志衣,博客上面所說的下載類,在同一時間段內(nèi)下載一個文件還行猛们,
但是念脯,你要是下載多個任務(wù),一系列問題就迸發(fā)出來了弯淘,任務(wù)的取消和暫停此時怎么控制绿店?怎么把有業(yè)務(wù)邏輯的任務(wù)和此時的下載任務(wù)一一對應(yīng)起來?
這時庐橙,就應(yīng)該在這個下載類的上面再封裝一次假勿,由這個上層類創(chuàng)造任務(wù),控制他們
關(guān)于第二個問題
上面的問題說到态鳖,創(chuàng)造一個上層類转培,我們都知道搞一個單例對象來實現(xiàn)這個實例不被銷毀
我們知道,對象不會銷毀浆竭,它的屬性也不會銷毀浸须,所以在這個上層類中添加一個taskDict的字典屬性(/** 存儲下載的HFDownloader,因為單個任務(wù)對應(yīng)一個HFDownloader 的實例)這樣每一個下載任務(wù)就被保存了起來邦泄,而且可以隨時隨地的取出來進(jìn)行其他操作删窒。
關(guān)于用法
-->1.在項目中導(dǎo)入HFDownloadManager.h頭文件;
-->2.搭建UI時虎韵,設(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ù)時或辖,
調(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ù)取消了但惶,因為耳鸯,我們每次請求下載任務(wù)的時候都已經(jīng)知道了這個文件已經(jīng)內(nèi)存中的位置和大小了。直接利用服務(wù)器開始新的下載就OK了膀曾。
更詳細(xì)的用法县爬,在demo中都有代碼注釋。
如果你覺得有用添谊,請給小子一個??财喳。