在Android运行机制里面, 不同分辨率不同RAM大小的设备会被分配不同的初始运行内存.更高分辨率的设备也肯定比更低分辨率设备需要更多的内存.具体分配多少,这个可以查看自己设备当中/system/build.prop 文件,里面有说明.(以下是我的测试设备 LG 720P分辨率 4.7英寸的手机的信息)
<span style="white-space:pre"> </span>dalvik.vm.heapstartsize = 8m dalvik.vm.heapsize = 256m dalvik.vm.heapgrowthlimit= 70mheapgrowthlimit 是一个普通应用的内存限制 ,可以用ActivityManager.getLargeMemoryClass() 方法得到.
heapstartsize 是初始内存,应用随着使用,内存不断自动的增加,会慢慢达到上限的最大内存.
AndroidManifest.xml 的Application标签有个android:largeHeap="true" 属性,当设为true时,可以向设备申请更多内存, 默认为false.而这个就算设为true也不会无限量地分配,当达到一定的阀值依旧会报OOM错误. 因此Google官方并不推荐这个做,作为开发我们应该首先考虑的是如何降低内存或者减少内存的增量使用,而不是一味的去增加内存空间.
在开发当中,我们为了避免OOM,应该尽量的优化算法逻辑,使用官方推荐提供的方法, 比如2.3以前常用的WeakReference和SoftReference, 到现在的LruCache类等等,
优秀的应用都应该对内存有合理清晰的分配,而不是随意的去新建对象,不断打开页面也不关闭旧的页面, 或者大量的做资源缓存等等的操作.及时的释放内存,并且在缓存一些图片资源前通过类似getLargeMemoryClass()的方法去提前获知应用可用最大内存,从而合理地预设缓存大小,才能有效的避免OOM问题.
原文地址:http://blog.csdn.net/stzy00/article/details/42550471