Glide果然好用,调用方便,提供多种图片加载框架,一直用的是Glide,这里我也没有改,项目上线一个月了,突然测试发现一个问题,就是图片是概率黑屏,我一致以为是图片未下载成功,就没在意,因为老化房有一台设备,一致在运行,没有出现这个问题,后来我自己下载了4K的高清出片,来测试,果然
OOM,很好奇,Glide应该有缓存处理的工作,但是我无论怎么优化,还是OOM,
从studio监控的内存状态,目前系统给APP分配的内存是60M .加载10张图就差不多58M了,在加载两张必OOM。那么试试加大APP运行内存
<application
android:name="com.EtvApplication"
android:allowBackup="true"
android:icon="@mipmap/app_icon_green"
android:label="@string/app_name"
android:largeHeap="true"
android:supportsRtl="true"
android:theme="@style/AppTheme">
这行代码就是加大APP运行内存的 <!--android:largeHeap="true"-->
果然有效,直接分配了将近200M的运行内存,一下子就解决了这个问题
在配合Glide其他的配置,后来就灭有出现OOM的情况了,
1:在清单文件里面加大APP运行内存
<application
android:name="com.EtvApplication"
android:allowBackup="true"
android:icon="@mipmap/app_icon_green"
android:label="@string/app_name"
android:largeHeap="true"
android:supportsRtl="true"
android:theme="@style/AppTheme">
2:自定义Glide缓存尺寸这段代码我也是抄的
package com.etv.util.image;
import android.content.Context;
import com.bumptech.glide.Glide;
import com.bumptech.glide.GlideBuilder;
import com.bumptech.glide.load.engine.bitmap_recycle.LruBitmapPool;
import com.bumptech.glide.load.engine.cache.LruResourceCache;
import com.bumptech.glide.load.engine.cache.MemorySizeCalculator;
import com.bumptech.glide.module.GlideModule;
public class CustomCachingGlideModule implements GlideModule {
@Override
public void applyOptions(Context context, GlideBuilder builder) {
MemorySizeCalculator calculator = new MemorySizeCalculator(context);
int defaultMemoryCacheSize = calculator.getMemoryCacheSize();
int defaultBitmapPoolSize = calculator.getBitmapPoolSize();
int customMemoryCacheSize = (int) (1.2 * defaultMemoryCacheSize);
int customBitmapPoolSize = (int) (1.2 * defaultBitmapPoolSize);
builder.setMemoryCache(new LruResourceCache(customMemoryCacheSize));
builder.setBitmapPool(new LruBitmapPool(customBitmapPoolSize));
}
@Override
public void registerComponents(Context context, Glide glide) {
// nothing to do here
}
}3:在加载图片的时候,不要缓存资源,如果可以获取控件尺寸的话,可以控制加载的尺寸,
override(width,height)
Glide.with(paramContext)
.load(paramObject)
.skipMemoryCache(true) //禁止Glide内存缓存
.diskCacheStrategy(DiskCacheStrategy.NONE) //不缓存资源
// .override(500, 500)
.into(paramImageView);通过以上的方法,基本可以解决OOM的问题,
标签:
Glide OOM