0

大家好,我正在开发动态壁纸,并且正在使用很多位图。我已经对我的新动态壁纸进行了大约一周的测试,它可以完美运行,但是一旦我将它上传到市场,我就会不断收到这种异常: java.lang.OutOfMemoryError对于android.graphics.Bitmap.nativeCreateandroid.graphics.BitmapFactory.nativeDecodeAsset. 我使用这种位图的生命周期:

我创建了一个参考,例如:

Bitmap dark = null;
Bitmap cave = null;

onCreateEngine我初始化它们时:

cave = BitmapFactory.decodeResource(getResources(), R.drawable.cave);
dark = BitmapFactory.decodeResource(getResources(), R.drawable.dark);

这是引发异常的地方。对于这些图像:背景变暗云。毕竟我把它们画到这样的画布上:

canvas.save();
canvas.drawBitmap(bg, new Matrix(), new Paint());   
canvas.drawBitmap(dark, new Matrix(), new Paint()); 
canvas.restore();

我应该怎么办?最好只加载一张暗图像并将其绘制到画布宽度*高度倍?或者有什么方法可以做吗?我想recycle还是打电话onDestroy。但我不知道何时调用它们,因为异常被抛出。onCreate图像太大了吗?为什么它在我的设备上运行顺利,而在其他设备上却抛出异常?位图是 1484*1484 尺寸,云是 250*172 尺寸,它们应该是 2^x * 2^x 尺寸吗?

4

1 回答 1

1

只需尝试使用内存优化器,看看你在哪里创建内存泄漏。您可以为此使用 Eclipse Memory Analyzer(MAT)。这是使用位图的一个非常常见的问题。通过使用位图,您需要格外小心内存泄漏。

于 2013-06-17T08:46:35.877 回答