Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Andriod DiskLruCache的使用案例

Andriod DiskLruCache的使用案例

編輯:關於Android編程

DiskLruCache是谷歌推薦的用來實現硬盤緩存的類,本案例將對DiskLruCache的基本用法做一個總結,包括:創建緩存、查找使用緩存、移除緩存等等。

實現效果圖

這裡寫圖片描述

創建DiskLruCache

DiskLruCache使用open方法創建一個實例,如下所示:對應的四個參數分別為:緩存目錄、應用版本號、單個key對應的數據的個數(一般設為1)、緩存的總大小,其中key是圖片的url經過MD5轉碼獲得的,防止url帶有特殊符號影響緩存的正常使用。

try {
            File cacheDir = getDiskCacheDir(this, "bitmap");
            if (!cacheDir.exists()) {
                cacheDir.mkdirs();
            }
            mDiskLruCache = DiskLruCache.open(cacheDir, getAppVersion(this), 1, 10 * 1024 * 1024);
        } catch (Exception e) {
            e.printStackTrace();
        }

存儲緩存

通過DiskLruCache.Editor可以獲取到緩存對象的編輯對象editor,類似於SharedPreference的editor。DiskLruCache不允許同時編輯一個緩存對象,如果這個緩存對象正在被編輯,則editor==null。

new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    String key = hashKeyForDisk(imageUrl);
                    DiskLruCache.Editor editor = null;

                    editor = mDiskLruCache.edit(key);
                    if (editor != null) {
                        OutputStream outputStream = editor.newOutputStream(0);
                        if (downloadUrlToStream(imageUrl, outputStream)) {
                            editor.commit();
                        } else {
                            editor.abort();
                        }
                    }
                    //不該頻繁的flush,防止journal日志文件的頻繁修改
                    mDiskLruCache.flush();
                    handler.post(new Runnable() {
                        @Override
                        public void run() {
                            textView.setText("saveCache done,the bitmap is ready");
                        }
                    });
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }).start();

讀取緩存

DiskLruCache.get(String key)方法可以獲取到一個Snapshot實例,通過DiskLruCache.Snapshot實例獲取緩存文件的輸入流,即可在imageView上顯示該圖片。

//讀取緩存
        try {
            DiskLruCache.Snapshot snapshot = mDiskLruCache.get(hashKeyForDisk(imageUrl));
            if (snapshot != null) {
                InputStream is = snapshot.getInputStream(0);
                Bitmap bitmap = BitmapFactory.decodeStream(is);
                imageView.setImageBitmap(bitmap);
            } else {
                imageView.setImageBitmap(null);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

另外,DiskLruCache還提供了清空緩存delete()、獲取緩存目錄下的緩存大小size()等方法操作緩存。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved