【问题标题】:OutOfMemoryError when processing Bitmaps for the second time第二次处理位图时出现OutOfMemoryError
【发布时间】:2011-10-30 15:14:37
【问题描述】:

我在一个活动中处理许多位图以创建一个 AnimationDrawable 并且它运行良好(即使它使用大量内存)。但是当用户按下返回并返回到 MainActivity 时,内存并没有被释放。

那一刻:

  • 如果用户随后重新启动第二个活动以创建另一个活动 AnimationDrawable,会因为内存不足而发生OOMError 分配给我的应用程序不能同时包含两个 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 相当“繁重”。我该如何摆脱它?我希望应用程序在第二个活动暂停后立即“忘记它”。

非常感谢。 :)

【问题讨论】:

标签: java android bitmap out-of-memory


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2014-08-13
    • 2014-09-07
    • 1970-01-01
    • 1970-01-01
    • 2013-11-14
    • 1970-01-01
    • 2020-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多