android 图片内存溢出
 

在界面显示多个图片的时候(10多张图片,每张500Kb左右),就会出现内存溢出的日志,但是应用不会崩溃,只会导致图片不显示,只显示占位图或者加重错误的图片。
这种情况只在一种设备上出现(厂家定制的设备),在其他手机上不会出现,在模拟器上(运存调到800MB)也不会出现。有没有懂得老司机帮忙分析一下。

 
 
图片说明
上图是出现的异常日志
 
图片说明
上图是运行时内存使用情况
 
图片说明
上图是查看build.prop文件的内存
 

5个回答

重新配置下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" />

                    这么试试
chengliang0315
提笔忘字 找到原因了 被误导了,虽然你的回答没有直接指出答案,但是在测试你的方案的时候让我找出了问题,感谢了
大约 2 年之前 回复
zanjiaowei
smile_邝野 我补充下,上面的那个GlideModelConfig是新建个Java文件
大约 2 年之前 回复

有没有尝试过对图片进行压缩处理,或者进行图片加载缓存

ziyejinwei1994
ziyejinwei1994 回复提笔忘字: 框架的压缩是压缩大小 你需要压缩质量
大约 2 年之前 回复
ziyejinwei1994
ziyejinwei1994 回复提笔忘字: http://www.cnblogs.com/xiaochao1234/p/3880402.html 压缩之前设置下options.inPreferredConfig = Bitmap.Config.RGB_565;
大约 2 年之前 回复
chengliang0315
提笔忘字 不管用的,压缩都用过,用的Glide图片加载,这个框架是有缓存机制的,而且默认会压缩图片
大约 2 年之前 回复

使用Glide直接加载到ImageView吗,去看下Glide的api,应该可以配置压缩得更小一些的

chengliang0315
提笔忘字 试过的,没什么效果
大约 2 年之前 回复
chengliang0315
提笔忘字 试过的,没什么效果
大约 2 年之前 回复

我是用fresco倒是没出现过内存泄漏,你可以试试

chengliang0315
提笔忘字 Picasso Glide Fresco 都有用过,都会出现
大约 2 年之前 回复

建议你用Picasso或者Glide试试

chengliang0315
提笔忘字 哥们儿 我都试过了
大约 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!