0

在我的 Android 应用程序中,当我第二次运行我的一个活动时,我得到一个OutOfMemoryError. 我想我需要在活动运行时第一次删除位图。但我不知道我该怎么做。谢谢你。

4

3 回答 3

2

尝试从您的代码中读取您的位图。将位图放在 res/drawable-hdpi 文件夹中。(不同的图像质量有不同的文件夹)。在代码中设置位图字段:

Bitmap alpha;
Bitmap foo;

现在在 onResume() 中初始化位图:

Options options = new Options();
alpha = BitmapFactory.decodeResource(game.getResources(), R.drawable.youBitmapName, options);
foo = BitmapFactory.decodeResource(game.getResources(), R.drawable.youBitmapName2, options);

选项将使您能够下采样。(我不确定您的图像有多大,但您可能还想使用缩放方法)。

在 onPause 中,通过调用清理资源:

alpha.recycle();
alpha = null;
foo.recycle();
foo = null;

一旦调用 onResume() 方法,位图就会重新初始化。

于 2012-07-13T13:39:43.763 回答
0

清空您的位图并调用垃圾收集器:System.gc();和/或Runtime.getRuntime().gc();

还提供有关您的代码的更多详细信息以获得更好的答案。

于 2012-07-13T13:40:25.690 回答
0

通常Bitmap.recycle(),一旦没有更多引用指向该实例,垃圾收集器就会调用。

如果您想“强制”清理位图,请recycle()自行调用。

但我建议先寻找内存泄漏。

于 2012-07-13T13:40:54.323 回答