Android 關於緩衝的一些類

來源:互聯網
上載者:User

標籤:

在做項目的時候,難免需要將一些資料存放區在手機中,之前用sqlite和sharepreference,但是使用起來不是很方便。最近用到了一些緩衝的類,非常方便,特此記錄下來。
ASimpleCache

項目地址:https://github.com/yangfuhai/ASimpleCache
ASimpleCache 是一個為android制定的 輕量級的 開源緩衝架構。輕量到只有一個java檔案(由十幾個類精簡而來)。可以緩衝普通的字串、JsonObject、JsonArray、Bitmap、Drawable、序列化的java對象,和 byte資料,使用起來非常方便。

//儲存資料ACache mCache = ACache.get(this);mCache.put("test_key1", "test value");mCache.put("test_key2", "test value", 10);//儲存10秒,如果超過10秒去擷取這個key,將為nullmCache.put("test_key3", "test value", 2 * ACache.TIME_DAY);//儲存兩天,如果超過兩天去擷取這個key,將為null//擷取資料ACache mCache = ACache.get(this);String value = mCache.getAsString("test_key1");
LruCache

參考: Android高效載入大圖、多圖解決方案,有效避免程式OOM(郭霖大神的部落格)
記憶體緩衝技術對那些大量佔用應用程式寶貴記憶體的圖片提供了快速存取的方法。其中最核心的類是LruCache (此類在android-support-v4的包中提供) 。這個類非常適合用來緩衝圖片,它的主要演算法原理是把最近使用的對象用強引用儲存在 LinkedHashMap 中,並且把最近最少使用的對象在緩衝值達到預設定值之前從記憶體中移除。

private LruCache<String, Bitmap> mMemoryCache;  @Override  protected void onCreate(Bundle savedInstanceState) {      // 擷取到可用記憶體的最大值,使用記憶體超出這個值會引起OutOfMemory異常。      // LruCache通過建構函式傳入緩衝值,以KB為單位。      int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);      // 使用最大可用記憶體值的1/8作為緩衝的大小。      int cacheSize = maxMemory / 8;      mMemoryCache = new LruCache<String, Bitmap>(cacheSize) {          @Override          protected int sizeOf(String key, Bitmap bitmap) {              // 重寫此方法來衡量每張圖片的大小,預設返回圖片數量。              return bitmap.getByteCount() / 1024;          }      };  }  public void addBitmapToMemoryCache(String key, Bitmap bitmap) {      if (getBitmapFromMemCache(key) == null) {          mMemoryCache.put(key, bitmap);      }  }  public Bitmap getBitmapFromMemCache(String key) {      return mMemoryCache.get(key);  }  
DiskLruCache

參考:Android DiskLruCache完全解析,硬碟緩衝的最佳方案
(參考的也是郭霖大神的部落格,裡面詳細的介紹了DiskLruCache的用法。)
LruCache只是管理了記憶體中圖片的儲存與釋放,如果圖片從記憶體中被移除的話,那麼又需要從網路上重新載入一次圖片,這顯然非常耗時。對此,Google又提供了一套硬碟緩衝的解決方案:DiskLruCache(非Google官方編寫,但獲得官方認證)。

LruCache和DiskLruCache結合

Android照片牆完整版,完美結合LruCache和DiskLruCache(還是郭霖大神的部落格)
從網路上下載圖片,並緩衝在本地。具體流程與原始碼,參考這篇部落格。

Android 關於緩衝的一些類

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.