Android开发中如何避免内存溢出

本文介绍了在Android开发中如何避免因内存使用不当导致的BitmapFactory.DecodeFileError等问题。通过合理控制ImageView数量及适时释放不再使用的图片资源,可以有效降低内存消耗。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果您在开发中遇到如上所示的错误,那么请您看完本文!

  首先我们要明确一点,在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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值