在界面显示多个图片的时候(10多张图片,每张500Kb左右),就会出现内存溢出的日志,但是应用不会崩溃,只会导致图片不显示,只显示占位图或者加重错误的图片。
这种情况只在一种设备上出现(厂家定制的设备),在其他手机上不会出现,在模拟器上(运存调到800MB)也不会出现。有没有懂得老司机帮忙分析一下。
上图是出现的异常日志
上图是运行时内存使用情况
上图是查看build.prop文件的内存
重新配置下glide配置如下
public class GlideModelConfig implements GlideModule{
int diskSize = 1024 * 1024 * 100 ;
int memorySize = (int) (Runtime.getRuntime().maxMemory()) / 8;
@Override
public void applyOptions(Context context, GlideBuilder builder) {
//默认内存和图片池大小
MemorySizeCalculator calculator = new MemorySizeCalculator(context);
int defaultMemoryCacheSize = calculator.getMemoryCacheSize();//默认内存大小
int defaultBitmapPoolSize = calculator.getBitmapPoolSize();//默认图片池大小
builder.setMemoryCache(new LruResourceCache(defaultMemoryCacheSize));
builder.setBitmapPool(new LruBitmapPool(defaultBitmapPoolSize));
//自定义图片的本地磁盘缓存
File cacheDir =context.getExternalCacheDir();//置顶数据的缓存地址
int diskCacheSize = 1024 * 1024 * 30 ;//最多缓存字节数据
//设置磁盘缓存大小
builder.setDiskCache(new DiskLruCacheFactory(cacheDir.getPath(),"glide",diskCacheSize));
//定义缓存大小和位置
builder.setDiskCache(new InternalCacheDiskCacheFactory(context,diskSize));//内存中
builder.setDiskCache(new ExternalCacheDiskCacheFactory(context,"cache",diskSize));//SD卡中
//定义图片格式
builder.setDecodeFormat(DecodeFormat.PREFER_RGB_565);
//自定义内存和图片池大小
builder.setMemoryCache(new LruResourceCache(memorySize));
builder.setBitmapPool(new LruBitmapPool(memorySize));
}
@Override
public void registerComponents(Context context, Glide glide) {
}
}
之后在清单文件中
<!-- 配置glide相关缓存策略 -->
android:name="包名.GlideModelConfig"
android:value="GlideModule" />
这么试试