android开发中如何避免内存溢出
ERROR/dalvikvm-heap(4204): 691456-byte external allocation too large for this process.
01-25 22:13:18.694: ERROR/(4204): VM won’t let us allocate 691456 bytes 01-25 22:13:18.694
如果您在开发中遇到如上所示的错误,那么请您看完本文!
首先我们要明确一点,在android开发中,堆的大小!=机器内存大小(Heap size != External Memory size)
android虚拟机自身已经限制了一个进程的内存在0——4MB之间,如果超过4M,那么您就会得到象BitmapFactory.DecodeFile Error 这样的错误,这就可以解释为什么我们看到内存还剩下2M,但虚拟机却不给我们分配700K的空间。所以通过增大系统内存的方法是行不通的,我们只能通过减少内存的使用,这也是我所知道的唯一的方法,并且已经获得成功。
解决方案:
如果您使用一个Gallery来展示很多大图片,那么你需要一个 ImageAdapter来得到图片信息,因此,就很把很多的ImageView 放到一个List中。现在,当你在设置 ImageView时(哪怕你并不使用它),系统内存都会超过4M,就算你调用回收内存的方法也不管用。唯一的解决方法就是不用使用太多的图片控件,建议在5——10个之间即可。
我们怎么做呢?
这个一个很棘手的问题,你需要在您的ImageAdapter中写一个算法,让它能够释放当前不显示图片的内存,我们可以这样调用:
myImageView.setImageBitmap(null);
如果你有胆量的话,在你不需要显示原始图片时,您可以通过资源文件加载图片,但是要注意,如果错误的使用资源文件也会把4M的内存耗尽。方法如下所示:
myImageView.setImageResource(R.drawable.loadingImage);