美文网首页
Bitmap加载中的LruCache及LruDiskCache

Bitmap加载中的LruCache及LruDiskCache

作者: liaowenhao | 来源:发表于2017-08-26 20:23 被阅读46次

    LruCache常用作内存缓存。
    DiskLruCache常用作存储设备缓存。

    1. LruCache
      LruCache是Android3.1提供的一个缓存类,通过support-v4兼容包可兼容到早期的Android版本。把最近使用的对象用强引用存储在 LinkedHashMap中,并且把最近最少使用的对象在缓存值达到预设定值之前从内存中移除。

    强引用:直接的对象引用
    软引用:当一个对象只有软引用存在时,系统内存不足时此对象会被gc回收。
    弱引用: 当一个对象只有弱引用存在时,此对象会随时被gc回收。

    1. DiskLruCache
      DiskLruCache不属于Android SDK的一部分。
      应用在SD card上的缓存目录具体是指/sdcard/Android/data/package_name/cache目录,当应用被卸载后,此目录会一并被删除。

    2. 获取Bitmap对象的大小

     public static int getBitmapSize(Bitmap bitmap) {  
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {        //API 19  
             return bitmap.getAllocationByteCount();  
         }  
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR1) {
            //API 12  
             return bitmap.getByteCount();  
         }  
         // 在低版本中用一行的字节x高度.LruCache中计算图片大小sizeof使用此方法。
         return bitmap.getRowBytes() * bitmap.getHeight();
     }  
    

    开发应避免使用Enum(枚举类),因为相比于静态常量Enum会花费两倍以上的内存。使用IntDef/StringDef代替Enum.

    相关文章

      网友评论

          本文标题:Bitmap加载中的LruCache及LruDiskCache

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