我正在为小孩子开发一款游戏,其中包含不同的教育练习。 在其中一个我需要一个图片背景,所以我加载它并使用矩阵来缩放它以填充屏幕。但有时加载图片会导致崩溃。
public DrawThread(SurfaceHolder surfaceHolder, Resources resources, float screen_x_max, float screen_y_max){
this.surfaceHolder = surfaceHolder;
screenWidth=screen_x_max;
screenHeight=screen_y_max;
// picture for bg
picture = BitmapFactory.decodeResource(resources, R.drawable.background);
...
}
在这个帖子的最后我回收它并且为null。
if (this.picture!=null)
{
this.picture.recycle();
this.picture=null;
}
但是应用仍然需要。有错误日志:
java.lang.OutOfMemoryError: bitmap size exceeds VM budget
at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:494)
at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:370)
at android.graphics.BitmapFactory.decodeResource(BitmapFactory.java:393)
at android.graphics.BitmapFactory.decodeResource(BitmapFactory.java:419)
at lexu.me.childstudy_lite.DrawThreadFindAnimals2.<init>(findAnimals2.java:271)
at lexu.me.childstudy_lite.findanimals2_view.surfaceCreated(findAnimals2.java:186)
at android.view.SurfaceView.updateWindow(SurfaceView.java:548)
at android.view.SurfaceView.dispatchDraw(SurfaceView.java:353)
at android.view.ViewGroup.drawChild(ViewGroup.java:1737)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1466)
at android.view.ViewGroup.drawChild(ViewGroup.java:1737)
感谢。
答案 0 :(得分:0)
这是Android上的经典问题。 这应该为您提供大量的提示和方法:
答案 1 :(得分:0)
通过下采样位图,您可以避免OME。看看以下链接。希望它有所帮助。
Android:Issue Image resolution
修改:在该链接中,从Asset文件夹中获取图片。您可以根据需要进行修改。
答案 2 :(得分:0)
您正在获得内存异常。要避免这种情况,请查看此链接: android how to handle out of memory exception
网上有大量信息可以帮助您解决这个问题。
我希望这会有所帮助。