美文网首页
Android 图片加载之图片缓存

Android 图片加载之图片缓存

作者: 孤独的根号十二 | 来源:发表于2019-04-15 13:02 被阅读0次

    1.内存缓存

    LruCache<String, Bitmap> mMemoryCache;
    
    // 获取到可用内存的最大值,使用内存超出这个值会引起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;
            }
        };
    
    
    
    mMemoryCache.put(key, bitmap);
    
    
    mMemoryCache.get(key);
    

    2.磁盘缓存

    1.打开缓存

    public static DiskLruCache open(File directory, int appVersion, int valueCount, long maxSize)
    

    open()方法接收四个参数,第一个参数指定的是数据的缓存地址,第二个参数指定当前应用程序的版本号,第三个参数指定同一个key可以对应多少个缓存文件,基本都是传1,第四个参数指定最多可以缓存多少字节的数据。

    2.写入缓存

    DiskLruCache.Editor editor = mDiskLruCache.edit(key);
                if (editor != null) {
                    OutputStream outputStream = editor.newOutputStream(0);
                    if (downloadUrlToStream(imageUrl, outputStream)) {
                        editor.commit();
                    } else {
                        editor.abort();
                    }
                }
                mDiskLruCache.flush();//不需要每次都flush,一般在Activity的onPause()方法中去调用一次flush()方法就可以了。
    

    3.读取缓存

    DiskLruCache.Snapshot snapShot = mDiskLruCache.get(key);
        if (snapShot != null) {
            InputStream is = snapShot.getInputStream(0);
            Bitmap bitmap = BitmapFactory.decodeStream(is);
            mImage.setImageBitmap(bitmap);
        }
    

    相关文章

      网友评论

          本文标题:Android 图片加载之图片缓存

          本文链接:https://www.haomeiwen.com/subject/vhkuwqtx.html