編輯:Android開發實例
一般的緩存策略是:
一級內存緩存、二級文件緩存(數據庫也算作文件緩存)、三級網絡數據
一、網絡下載的緩存策略
關於網絡下載文件(圖片、音頻、視頻)的基本策略:
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)給緩存文件加密。最簡單就是去掉文件的擴展名,這也算加密,當然,你可以把服務端文件加密,然後在內存中解密。這就看項目的需求而定,我的經驗也不足,一般就是改改擴展名之類的。
三、內存緩存策略
內存緩存策略是為了應對更加高效的緩存,對於不是頻煩更新的文件數據,就可以緩存在內存中,但是有以下注意事項:
a)內存的I/O,弱引用。弱引用可以讓JVM更加合理、自主的回收。
b)內存緩存的 key 也必須唯一,可以參考文件緩存 key 策略。
c)提供一個內存緩存刷新的接口。雖然內存緩存本身的生命周期就較短,但它必竟是最上層的用戶數據,所以設計時提供一個UI刷新接口,是可以考慮的。
from:http://lichsword.net/blog/archives/542
Android通用流行框架大全 1. 緩存 DiskLruCacheJava實現基於LRU的磁盤緩存 2.圖片加載 Android Univer
JSON代表JavaScript對象符號。它是一個獨立的數據交換格式,是XML的最佳替代品。本章介紹了如何解析JSON文件,並從中提取所需的信息。Android提供了四個
Android提供了許多方法來控制播放的音頻/視頻文件和流。其中該方法是通過一類稱為MediaPlayer。Android是提供MediaPlayer類訪問內置的媒體播放
Android提供了許多方法來控制播放的音頻/視頻文件和流。其中該方法是通過一類稱為MediaPlayer。Android是提供MediaPlayer類訪問內置的媒體播放