Android文件緩存方法

以下內容整理自互聯網,僅用于個人學習


1. 內存緩存

通過預先消耗應用的一點內存來存儲數據,便可快速的為應用中的組件提供數據,是一種典型的以空間換時間的策略。

LruCache 類(Android v4 Support Library 類庫中開始提供)非常適合來做圖片緩存任務 ,它可以使用一個LinkedHashMap的強引用來保存最近使用的對象,并且當它保存的對象占用的內存總和超出了為它設計的最大內存時會把不經常使用的對象成員踢出以供垃圾回收器回收。

給LruCache 設置一個合適的內存大小,需考慮如下因素:

  • 還剩余多少內存給你的activity或應用使用
  • 屏幕上需要一次性顯示多少張圖片和多少圖片在等待顯示
  • 手機的大小和密度是多少(密度越高的設備需要越大的 緩存)
  • 圖片的尺寸(決定了所占用的內存大小)
  • 圖片的訪問頻率(頻率高的在內存中一直保存)
  • 保存圖片的質量(不同像素的在不同情況下顯示)

2. 使用磁盤緩存

內存緩存能夠快速的獲取到最近顯示的圖片,但不一定就能夠獲取到。當數據集過大時很容易把內存緩存填滿(如GridView )。你的應用也有可能被其它的任務(比如來電)中斷進入到后臺,后臺應用有可能會被殺死,那么相應的內存緩存對象也會被銷毀。 當你的應用重新回到前臺顯示時,你的應用又需要一張一張的去加載圖片了。

磁盤文件緩存能夠用來處理這些情況,保存處理好的圖片,當內存緩存不可用的時候,直接讀取在硬盤中保存好的圖片,這樣可以有效的減少圖片加載的次數。讀取磁盤文件要比直接從內存緩存中讀取要慢一些,而且需要在一個UI主線程外的線程中進行,因為磁盤的讀取速度是不能夠保證的,磁盤文件緩存顯然也是一種以空間換時間的策略。

3. 使用SQLite進行緩存

網絡請求數據完成后,把文件的相關信息(如url(一般作為唯一標示),下載時間,過期時間)等存放到數據庫。下次加載的時候根據url先從數據庫中查詢,如果查詢到并且時間未過期,就根據路徑讀取本地文件,從而實現緩存的效果。

注意:緩存的數據庫是存放在/data/data//databases/目錄下,是占用內存空間的,如果緩存累計,容易浪費內存,需要及時清理緩存。

4. 文件緩存

思路和一般緩存一樣,把需要的數據存儲在文件中,下次加載時判斷文件是否存在和過期(使用File.lastModified()方法得到文件的最后修改時間,與當前時間判斷),存在并未過期就加載文件中的數據,否則請求服務器重新下載。

注意,無網絡環境下就默認讀取文件緩存中的。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,814評論 25 708
  • 0. 前言 前面有被用戶投訴 APP 流量消耗厲害: 于是乎考慮了流量方面的問題。暫時 APP 中涉及流量的幾個方...
    zyl06閱讀 24,173評論 5 63
  • 從三月份找實習到現在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發崗...
    時芥藍閱讀 42,340評論 11 349
  • 功能:圖片下載、圖片緩存、下載進度監聽、gif處理等等項目地址:https://github.com/rs/SDW...
    我是滕先生閱讀 17,190評論 8 135
  • 從九月份就期待著要看一場電影,一直沒實現,兩年多沒進電影院的我都快與社會脫節了,昨天鼓起勇氣去看了場電影《長城》,...
    方陽普閱讀 946評論 2 3