避免java.lang.OutOfMemoryError

时间:2013-06-17 08:36:09

标签: android bitmap

大家好我正在开发动态壁纸,我正在使用很多位图。我已经测试了我的新动态壁纸一周了,它已经完美运行了,但是一旦我将它上传到市场我就会遇到这种例外:java.lang.OutOfMemoryError对于android.graphics.Bitmap.nativeCreate }和android.graphics.BitmapFactory.nativeDecodeAsset。我使用这种位图的生命周期:

我创建了一个像:

的引用
Bitmap dark = null;
Bitmap cave = null;

onCreateEngine我按照以下方式开始:

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

这里是它的例外。对于这些图片:background darkening clouds。毕竟我把它们画成这样的画布:

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维度?

1 个答案:

答案 0 :(得分:1)

尝试使用Memory Optimizer,看看你在哪里创建内存泄漏。您可以使用Eclipse Memory Analyzer(MAT)进行此操作。这是使用位图的一个非常常见的问题。通过使用BitMaps,您需要特别注意内存泄漏。