技術博文2016/09/07

【APP開發】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()方法

本文來自新浪部落格