寫代碼也要讀書蹋凝,愛全棧鲁纠,更愛生活。每日更新原創(chuàng)IT編程技術教程鳍寂。技術大神帶你做全棧攻城獅改含。
我們的目標是:玩得轉服務器Web開發(fā),搞得懂移動端迄汛,電腦客戶端更是不在話下捍壤。
這是做全棧攻城獅原創(chuàng)的安卓開發(fā)系列教程,希望能以我微薄之力鞍爱,能幫助那些正在學習或者將要學習安卓開發(fā)的同仁鹃觉。當然技術性教程,因為知識的相關性睹逃,推薦按照順序進行學習盗扇。這里我貼一下目錄連接。http://blog.sina.com.cn/s/blog_6ab069310102wqbp.html沉填。公眾號:做全棧攻城獅疗隶。
上篇文章:安卓開發(fā)-使用異步網(wǎng)絡請求框架、多線程文件下載
本應該上節(jié)講解文件下載翼闹,因為時間太晚斑鼻,所以沒有更新文件下載的部分。那今天就用一長篇文章進行多線程文件下載猎荠。
多線程文件下載分析:
按照以前的邏輯坚弱,進行文件下載的時候,首先需要先建一個線程發(fā)送網(wǎng)絡請求法牲,獲取文件史汗,下載到本地。但有時這樣單獨在一個線程進行下載拒垃,對于大文件的話停撞,效率低下,下載速度非常慢悼瓮。
既然如此是否可以多開幾個線程進行同時下載文件操作呢戈毒?答案當然是可以的。沒錯横堡,多開幾個線程埋市,讓他們一起下載就行了∶可是著說起來很簡單道宅,做起來并沒有想象中簡單食听。今天我們就來拉開多線程下載的神秘面紗。一起做一個文件下載器污茵。
文件以區(qū)塊的形式保存在在硬盤上面樱报,其實多個線程下載也就是下載不同位置,同時進行下載:
以三個線程為例泞当,大致如下圖:
那我們就需要開啟三個線程迹蛤,并把文件均分為三部分。讓不同的線程去下載對應的部分襟士,最終下載完畢盗飒。
所以我們需要解決如下幾個問題:
獲取遠程文件大小,在本地創(chuàng)建一個空白的文件陋桂。
計算好逆趣,每個線程具體現(xiàn)在文件的那一塊。也就是每個線程開始和結束的索引章喉。
ok汗贫!先開始發(fā)請求身坐,當然我們使用的還是HttpURLConnection:
此時要做的就是秸脱,獲取遠程文件的大小,并在本地創(chuàng)建一個空文件部蛇。
接下來就是計算每個線程下載的位置索引摊唇。然后新建線程進行文件下載了:
新建進程類方便使用:
在循環(huán)內(nèi)部就可以這樣創(chuàng)建新線程了:
下面考慮進行文件的下載了:
如此,一個多線程下載文件器開發(fā)完成涯鲁,有時也許要實現(xiàn)斷點下載巷查。也就是在下載過程中,中斷下載之后抹腿,再次開啟可以繼續(xù)進行下載岛请。
這里提供一個思路,可以保存當前下載的位置到一個位置記錄文件警绩,下次按照文件記錄的位置繼續(xù)進行下載就可以了崇败。
你自己的安卓水平到什么程度了?安卓開發(fā)人員討論起來吧肩祥。