Android 利用緩衝機制實現檔案下載

來源:互聯網
上載者:User

在下載檔案或者線上瀏覽檔案時,或者為了保證檔案下載的正確性,需要使用緩衝機制,常使用SoftReference來實現。

 SoftReference的特點是它的一個執行個體儲存對一個Java對象的軟引用,該軟引用的存在不妨礙垃圾收集線程對該Java對象的回收。也就是說,一旦SoftReference儲存了對一個Java對象的軟引用後,在垃圾線程對這個Java對象回收前,SoftReference類所提供的get()方法返回Java對象的強引用。另外,一旦垃圾線程回收該Java對象之後,get()方法將返回null。軟引用可以和一個引用隊列(ReferenceQueue)聯合使用,如果軟引用所引用的對象被記憶體回收行程回收,Java虛擬機器就會把這個軟引用加入到與之關聯的引用隊列中。


一般的緩衝策略是:

一級記憶體緩衝、二級檔案快取(資料庫也算作檔案快取)、三級網路資料

一、網路下載的緩衝策略

關於網路下載檔案(圖片、音頻、視頻)的基本策略:


1.不要直接下載到目標檔案,應使用temp檔案作中轉,以確保檔案的正確性與完整性,流程如下:

a)以網路目標檔案名 A 產生唯一的本地目標檔案名 B

b)以本地目標檔案名 B 產生唯一的本地臨時檔案名稱 T

c)下載檔案到 T 中

d)下載完畢,校正檔案 T 的正確性與完整性

e)若不正確或不完整則 delete 檔案 T,並返回 false

f)校正完畢後,將檔案 T 重新命名 或 複製到 B 檔案

g)最後的清理現場,刪除臨時檔案 T,成功後,返回 true


2.儘力提供檔案正確性與完整性的校正:

a)正確性:比如 MD5/Hash Code 比對、檔案格式的比對。

b)完整性:比如 檔案大小是否一致、圖片的資料是否正確(圖片檔案頭中提供了相關資訊)
3.考慮對於下載到本地的檔案是否需要再做二次加工,可以思考以下情況:

a)比如網路源始圖片的大小為800*600,而我們需要作為縮圖的大小為160*145,所以考慮對下載後的檔案進行裁剪,再儲存,對於源始檔案則直接刪除。

二、檔案快取策略:
1.需要唯一的快取檔案的對應I/O key,一般可以使用 hashcode。
2.若是同一個檔案,以不同的時間,可以考慮,先清本機快取,再下載新的緩衝到本地。
3.同一檔案也可以加上時間戳記後,再產生唯一hashcode。
4.組建檔案緩時,也許需要作以下全面的考慮:

a)sdcard是否已經沒有空間(這個需求是存在的,但幾乎沒有人會考慮到,一旦發生,必crash)。

b)緩衝的清理策略。每日、每周定時清理?到達一個閥值後,自動清理?(若無清理策略,把垃圾資料一直當個寶一相存著,是很SB的)。

c)緩衝真正需要的資料。不要覺外存是無限的,所以就可以什麼都存,要知道,多則繁,繁則亂。曾經有一同事,每天存幾百MB的使用者資料(所有使用者的性別、 age、連絡方式等等),而PM需要的只是一個每日數戶的活躍資料報表,於是最後改為緩衝每天的使用者分析報表資料即可(才10幾KB)。

d)給快取檔案加密。最簡單就是去掉檔案的副檔名,這也算加密,當然,你可以把服務端檔案加密,然後在記憶體中解密。這就看項目的需求而定,我的經驗也不足,一般就是改改副檔名之類的。

說明:SoftReference 詳細請看 http://blog.csdn.net/kavendb/article/details/5935577

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.