Failed to allocate a 38189038 byte allocation with 16777216 free bytes and 20MB until OOM

在项目中将图片以base64格式上传,发现当上传的图片大于10张时,app直接崩溃了,出错log如下:

这里写图片描述
定位到出错代码发现是封装的网络底层出现了问题,代码如下:

这里写图片描述
出错log显示340行有问题,我看了半天也没发现有什么问题,最后在https://stackoverflow.com/questions/32919833/jsonobject-tostring-returns-outofmemoryerror找到了答案,原来是因为json数据太大了,超出了系统分配给应用的内存,从而导致了oom,解决方案也很简单,在manifest.xml中添加一个属性:

android:largeHeap="true"

添加这个属性之后,经测试没问题了.
android:largeHeapde的作用:

为了让应用能申请使用更多的内存,我们知道安卓系统对于每个应用都有内存使用的限制,机器的内存限制,

dalvik.vm.heapsize=128m    
dalvik.vm.heapgrowthlimit=64m   

这里heapgrowthlimit就是一个普通应用的内存限制,用ActivityManager.getLargeMemoryClass()获得的值就是这个。而heapsize是在manifest中设置了largeHeap=true之后,可以使用最大内存值。设置largeHeap的确可以增加内存的申请量。但不是系统有多少内存就可以申请多少,而是由dalvik.vm.heapsize限制。
---------------------  
作者:ivluowei  
来源:CSDN  
原文:https://blog.csdn.net/qq15357971925/article/details/78040152  
版权声明:本文为博主原创文章,转载请附上博文链接!

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值