位图回收Android

时间:2014-08-11 18:20:51

标签: android bitmap garbage-collection

我正在尝试从RAM中删除位图。但是当我使用System.gc()时,它不会清理RAM,并且应用程序停止使用java.lang.OutOfMemoryError异常。即使我使用

if((bitmap!=null)&&(!bitmap.isRecycled())){
    bitmap.recycle();
    bitmap=null;
}

仍然没有成功。 它清理RAM,但我不能再次使用回收的位图(我再次加载它但由于某些奇怪的原因不能使用它)。 有没有正确的方法从RAM中清除位图并在以后使用它?

编辑0:

加载位图:

temp=BitmapFactory.decodeResource(getResources(), R.drawable.bitmap);
bitmap=Bitmap.createScaledBitmap(temp, 100, 100, true);

1 个答案:

答案 0 :(得分:2)

  

但是当我使用System.gc()时,它不会清理RAM,并且应用程序停止使用java.lang.OutOfMemoryError异常。

部分原因是you are fragmenting your heap

  

它清理RAM,但我不能再使用回收的位图。

这是recycle()

的要点
  

有没有正确的方法从RAM中清除位图并在以后使用它?

再次加载位图。如果解决方案相同,请考虑using inBitmap 重用现有Bitmap对象,而不是使用recycle()和(毫无意义地)调用System.gc() 。另请考虑using inSampleSize首先减少位图的内存使用量,方法是将分辨率更接近您想要显示的内容。