Glide的加载优化

  • 设置缓存策略

    一般来说,对于内存和磁盘进行相应的控制,可以达到速度提升的效果,关于Glide的磁盘保存,一般不设置,Glide会自动存储全分辨率的图片大小,因此第一次加载会略微慢,一般只需要原图,如下设置
option = RequestOptions()
                .centerCrop()
                .placeholder(R.mipmap.fours_head)
                .error(R.mipmap.fours_head)
                .skipMemoryCache(true)
                .diskCacheStrategy(DiskCacheStrategy.DATA)
  • 加载自己所需尺寸的图片

option = RequestOptions()
                .centerCrop()
                .placeholder(R.mipmap.fours_head)
                .error(R.mipmap.fours_head)
                .skipMemoryCache(true)
                .override(60, 60)
                .diskCacheStrategy(DiskCacheStrategy.DATA)
  • 自定义GlideModule

    改变磁盘和线程池,加上内存自定义自己想要的加载效果。如下,根据设备内存情况,设置图片加载编解码格式
    
@Override
public void applyOptions(Context context, GlideBuilder builder) {
   // 设置磁盘缓存大小,
  builder.setDiskCache(InternalCacheDiskCacheFactory(context, "glide", 1024 * 1024 * 30))

   // 要用默认值作为基准,然后加以调整
   // 具体设置如下
   int myMemoryCacheSize = (int) (1.2f * memoryCacheSize);
   int myBitmapPoolSize = (int) (1.2f * bitmapPoolSize);
   mBuilder.setMemoryCache(new LruResourceCache(myMemoryCacheSize));
   mBuilder.setBitmapPool(new LruBitmapPool(myBitmapPoolSize));

   // 获取设备内存情况
   ActivityManager activityManager = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE)
   if (null != activityManager) {
      ActivityManager.MemoryInfo memoryInfo = new ActivityManager.MemoryInfo()
      memoryInfo.getMemoryInfo(memoryInfo)
      builder.setDecodeFormat(memoryInfo.lowMemory ? DecodeFormat.PREFER_RGB_565 : DecodeFormat.PREFER_ARGB_8888)
   }
}
  • 结合TrimMemory和LowMemory

    lowMemory时,调用Glide.cleanMemory清理掉所有内存缓存
    App置于后台时,调用Glide.cleanMemory清理掉所有内存缓存
    其他情况的onTrimMemory回调中,直接调用Glide.trimMemory方法来交给Glide处理内存情况
@Override
public void onTrimMemory(int level) {
   super.onTrimMemory(level)
   if (level == TRIM_MEMORY_UI_HIDDEN) {
      Glide.get(this).clearMemory()
   }
   Glide.get(this).trimMemory(level)
}

@Override
public void onLowMemory() {
   super.onLowMemory()
   Glide.get(this).clearMemory()
}
  • 避免使用圆角的ImageView

    一般做法是接收到传递的Bitmap,然后再输出一个与原来Bitmap等大的新Bitmap,在此基础上,进行圆角等处理。由此导致了实际内存中会多持有一个Bitmap,导致内存占用加倍。因此,一般常规圆角、圆形等效果图加载使用Glide自带transform处理比较好

你可能感兴趣的:(Glide的加载优化)