第二次处理位图时出现OutOfMemoryError

时间:2011-10-30 15:14:38

标签: java android bitmap out-of-memory

我正在一个活动中处理许多Bitmaps以创建一个AnimationDrawable并且它完美地工作(即使它使用了大量内存)。但是当用户按下并返回MainActivity时,内存不会被释放。

那一刻:

  • 如果用户然后重新启动第二个活动以创建另一个活动 AnimationDrawable,因为内存会发生OOMError 分配给我的App不能同时包含两个AnimationDrawables 时间。
  • 如果用户调用finish(),则应用程序将保持缓存状态,并且内存也不会被释放。

如何释放内存?我尝试在第二个活动结束时将所有变量设置为 null ,我尝试在不同时刻调用system.gc()。

这部分代码应该足够了:

try {
        d = (BitmapDrawable) BitmapDrawable.createFromStream(new BufferedInputStream(new FileInputStream(src)), null);
        b = ((BitmapDrawable) d).getBitmap();
        b = Bitmap.createScaledBitmap(b, 300, 450, true);
        d = new BitmapDrawable(b);

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
        animation.addFrame(d,1000/fps); // animation is an AnimationDrawable

这部分代码位于 for 循环中,它通常重复大约70到100次, animation 因此非常“重”。我怎么摆脱它?我希望应用程序在第二个活动暂停后立即“忘记”。

非常感谢你。 :)

1 个答案:

答案 0 :(得分:1)

当您不再需要Bitmap对象时调用.recycle()方法:

http://developer.android.com/reference/android/graphics/Bitmap.html#recycle()