Failed to allocate a 38189038 byte allocation with 16777216 free bytes and 20MB until OOM
程序员文章站
2022-04-26 22:31:49
...
在项目中将图片以base64格式上传,发现当上传的图片大于10张时,app直接崩溃了,出错log如下:
定位到出错代码发现是封装的网络底层出现了问题,代码如下:
出错log显示340行有问题,我看了半天也没发现有什么问题,最后在https://*.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限制。