在手机上测试我的应用程序时,出现内存不足错误,经过一番研究,我发现这是由于我对位图的不当使用所致。最初,我将这样声明一个位图:
Bitmap image = BitmapFactory.decodeResource(getResources(), R.drawable.image_name);
从日志中,我看到了错误源于此。因此,我阅读并尝试使用额外的参数,选项,例如:
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
然后声明位图...
image = BitmapFactory.decodeResource(getResources(), R.drawable.image_name, options);
运行此代码时,我不再遇到内存不足错误,但是当尝试使用位图时,如果试图将它们绘制到画布上,或者调用.getWidth()和.getHeight,我确实会收到空指针异常。 () 在他们。
我很难尝试解决此问题,我们将不胜感激。
错误日志:
01-27 18:47:42.597: E/AndroidRuntime(15698): java.lang.NullPointerException
01-27 18:47:42.597: E/AndroidRuntime(15698): at android.graphics.Canvas.throwIfCannotDraw(Canvas.java:1083)
01-27 18:47:42.597: E/AndroidRuntime(15698): at android.graphics.Canvas.drawBitmap(Canvas.java:1139)
01-27 18:47:42.597: E/AndroidRuntime(15698): at com.mascal.petele.Game$OurView.drawMenu(Game.java:654)
01-27 18:47:42.597: E/AndroidRuntime(15698): at com.mascal.petele.Looping.run(Looping.java:34)
在Game.java:654中,代码行是:
c.drawBitmap(background, 0, 0, null);
这是位图用法的第一次出现,并且彼此之间也是如此。
最佳答案
这是inJustDecodeBounds的文档:http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html#inJustDecodeBounds
这是文本,突出显示了我自己的文本:
如果设置为true,则解码器将返回null(无位图),但仍将设置out ...字段,以允许调用方查询
位图,而不必为其像素分配内存。
如您所见,您设置了一个选项来保证您将获得一个空位图!