Android HTTP下載檔案
通過HTTP下載網路上面的檔案,可以設定下載任務的優先順序優先順序高的先下載,允許那種網路下載,對下載任務做相應的暫停和取消。
一. 程式碼下載地址
二. 簡單的介紹
2). 裡面類的簡單介紹
(1). DownloadManager 單例裡面維護了一個可以設定優先順序的執行緒池。
(2). DownloadRequest 下載請求的一個封裝,包括url,本地檔案路徑,progress更新的間隔,那種網路情況下才同意下載,是否暫停取消等一下屬性。
(3). DownloadRequestHelpQueue 加這個類是因為我們要想辦法控制下載任務的暫停和取消,我們知道一旦把一個下載的任務加入到執行緒池當中去了之後我們是控制不到執行緒池中的執行緒的,所以在DownloadRequestHelpQueue我們維護一個Set mCurrentRequests的Set來記錄我們新增的下載DownloadRequest。當我們要把一個download task(DownloadRequest)加入到執行緒池之前我們會先通過mCurrentRequests判斷這個任務先前有沒有加過,如果沒有加過我們就把這個下載任務加入到執行緒池同時加入到mCurrentRequests中,這樣執行緒池中的執行緒會mCurrentRequests會指向同一個DownloadRequest,然後我們控制mCurrentRequests中的DownloadRequest也就控制了執行緒池中的DownloadRequest這樣我們就可以做一些暫停取消之類的操作了。最後一點如果我們的一個下載任務結束了之後也要從mCurrentRequests把相應的任務刪掉。
(4). DownloadPrioritizedRunnable 執行緒池中要加入的Runnable,實現了Runnable和Comparable(給任務設定優先順序)。具體的下載和任務的取消都會在這個裡面體現出來。
(5). 就是下載過程的監聽了,回撥實現的,具體可以看下程式碼哦。
程式碼中有一個簡單的使用例項。
最後要說一點就是暫停和繼續功能我們是通過另一種方式達到的,因為我們都知道執行緒我們是沒辦法暫停的。所以如果你要實現暫停和繼續的功能在呼叫stop之後你要再次把這個下載任務加入進去,他會繼續在原來下載過的基礎上下載,從而達到了暫停和繼續的功能。
介紹寫的非常簡單,所有的一切都可以去看下程式碼的具體實現,程式碼應該是比較簡單的一下子就能看明白。