Android Bitmap笔记

比较常用的缓冲策略LruCache和DiskLruCache

通过BitmapFactory.Options key 可以按照一定的采样率来加载缩小后的图片,这样可以江都内存占用一定避免oom

采样率 inSampleSize,为1时,采样后为图片原始大小,当大于1时采样后的图片宽/高均为原图大小的1/inSampleSize,像素为原图的1/(inSampleSize,的2次方),所占内存大小也为原图的1/(inSampleSize,的2次方),inSampleSize的取值总是2的指数,如果不是,那么系统会向下取整。

获取采样率如下:

  1. 将inJustDecodeBounds参数设为true并加载图片
  2. 从BitmapFactor.options中取出图片的原始宽高信息,他们对应于outWidth和outHeight
  3. 根据采样率的规则并结合目标View的所需大小计算出采样率inSampleSize。
  4. 将BitmapFactory.options的injustDecodeBOunds参数设为false,然后重新加载图片

当injustDecodeBounds 为true时,BitmapFactory只会解析图片,并不会真正去加载图片。

Lru算法

1.LruCache 

LruCache是一个泛型,内部采用一个LinkedHashMap以强引用的方式存储外界对象

LruCache是线程安全的

相关方法

int maxMemory = (int) Runtime.getRuntime().maxMemory();
        int cacheSize = maxMemory / 8;
        mLruCache = new LruCache(cacheSize) {
            @Override
            protected int sizeOf(String key, Bitmap value) {
                //计算一个元素的缓存大小
                return value.getByteCount();
            }

           @Override
            protected void entryRemoved(boolean evicted, String key, Bitmap oldValue, Bitmap newValue) {
        }; 

移除旧缓存会调用entryRemoved方法,因此可以在entryRemoved中完成一些资源回收工作

附:

TreadFactory

 

 

你可能感兴趣的:(android)