寫代碼也要讀書,愛全棧,更愛生活。每日更新原創IT編程技術教程。技術大神帶你做全棧攻城獅。
我們的目標是:玩得轉服務器Web開發,搞得懂移動端,電腦客戶端更是不在話下。
這是做全棧攻城獅原創的安卓開發系列教程,希望能以我微薄之力,能幫助那些正在學習或者將要學習安卓開發的同仁。當然技術性教程,因為知識的相關性,推薦按照順序進行學習。這里我貼一下目錄連接。http://blog.sina.com.cn/s/blog_6ab069310102wqbp.html。公眾號:做全棧攻城獅。
本應該上節講解文件下載,因為時間太晚,所以沒有更新文件下載的部分。那今天就用一長篇文章進行多線程文件下載。
多線程文件下載分析:
按照以前的邏輯,進行文件下載的時候,首先需要先建一個線程發送網絡請求,獲取文件,下載到本地。但有時這樣單獨在一個線程進行下載,對于大文件的話,效率低下,下載速度非常慢。
既然如此是否可以多開幾個線程進行同時下載文件操作呢?答案當然是可以的。沒錯,多開幾個線程,讓他們一起下載就行了。可是著說起來很簡單,做起來并沒有想象中簡單。今天我們就來拉開多線程下載的神秘面紗。一起做一個文件下載器。
文件以區塊的形式保存在在硬盤上面,其實多個線程下載也就是下載不同位置,同時進行下載:
以三個線程為例,大致如下圖:
那我們就需要開啟三個線程,并把文件均分為三部分。讓不同的線程去下載對應的部分,最終下載完畢。
所以我們需要解決如下幾個問題:
獲取遠程文件大小,在本地創建一個空白的文件。
計算好,每個線程具體現在文件的那一塊。也就是每個線程開始和結束的索引。
ok!先開始發請求,當然我們使用的還是HttpURLConnection:
此時要做的就是,獲取遠程文件的大小,并在本地創建一個空文件。
接下來就是計算每個線程下載的位置索引。然后新建線程進行文件下載了:
新建進程類方便使用:
在循環內部就可以這樣創建新線程了:
下面考慮進行文件的下載了:
如此,一個多線程下載文件器開發完成,有時也許要實現斷點下載。也就是在下載過程中,中斷下載之后,再次開啟可以繼續進行下載。
這里提供一個思路,可以保存當前下載的位置到一個位置記錄文件,下次按照文件記錄的位置繼續進行下載就可以了。
你自己的安卓水平到什么程度了?安卓開發人員討論起來吧。