多線程斷點下載流程圖:
Android多線程斷點續傳下載原理介紹:
在下載的時候多個線程並發可以占用服務器端更多資源,從而加快下載速度
手機端下載數據時難免會出現無信號斷線、電量不足等情況,所以需要斷點續傳功能
根據下載數據長度計算每個線程下載的數據位置,程序中開啟多個線程並發下載
在請求頭中設置Range字段就可以獲取指定位置的數據,例如:Range: bytes=100-200
在下載過程中記錄每個線程已拷貝數據的數量,如果下載中斷,下次啟動時從記錄位置繼續下載
實例圖:
一. 進度條使用<Progress>進行配置
1.1 默認為圓形進度條,水平進度條需要配置style屬性,android:attr/progressBarStyleHorizontal
使用android.R.attr.progressBarStyleHorizontal作為樣式
1.2 當點擊下載按鈕時開啟多線程下載,下載過程中修改進度條進度
設置最大刻度:setMax()
設置當前進度:setProgress()
二. 斷點續傳
2.1 斷點續傳需要在下載過程中記錄每條線程的下載進度 (保存在 文件名.temp文件中 同迅雷中的.temp文件的功能)
2.2 每次下載開始之前先讀取數據庫,查詢是否有未完成的記錄,有就繼續下載,沒有則創建新記錄插入數據庫
2.3 在每次向文件中寫入數據之後,在數據庫中更新下載進度
2.4 下載完成之後刪除數據庫中下載記錄(文件名.temp文件)
三. Handler傳輸數據
3.1 主線程中創建的View只能在主線程中修改,其他線程只能通過和主線程通信,在主線程中改變View數據
3.2 我們使用Handler可以處理這種需求
3.3 主線程中創建Handler,重寫handleMessage()方法
3.4 新線程中使用Handler發送消息,主線程即可收到消息,並且執行handleMessage()方法