-
设置缓存策略
一般来说,对于内存和磁盘进行相应的控制,可以达到速度提升的效果,关于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)
@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处理比较好
网友评论