Java Android游戏中的outOfMemoryException

Java Android游戏中的outOfMemoryException,java,android,Java,Android,我一直在写一个android游戏,我终于完成了所有的事情,它在模拟器和我的手机上运行得非常好,这是一个根深蒂固的机器人,但当我投入市场时,我开始收到关于它强制关闭的报告,我让我父母把它放在他们的手机上,当他们试图点击屏幕菜单上的开始按钮时,手机被迫关闭,但我的朋友们在播放完后试图重新打开手机时死掉了。我有他的日志,但我还不确定我父母的事。给你 07-18 23:58:32.457: ERROR/AndroidRuntime(25513): FATAL EXCEPTION: main 07-18

我一直在写一个android游戏,我终于完成了所有的事情,它在模拟器和我的手机上运行得非常好,这是一个根深蒂固的机器人,但当我投入市场时,我开始收到关于它强制关闭的报告,我让我父母把它放在他们的手机上,当他们试图点击屏幕菜单上的开始按钮时,手机被迫关闭,但我的朋友们在播放完后试图重新打开手机时死掉了。我有他的日志,但我还不确定我父母的事。给你

07-18 23:58:32.457: ERROR/AndroidRuntime(25513): FATAL EXCEPTION: main
07-18 23:58:32.457: ERROR/AndroidRuntime(25513): java.lang.OutOfMemoryError: bitmap size exceeds VM budget
07-18 23:58:32.457: ERROR/AndroidRuntime(25513):     at android.graphics.Bitmap.nativeCreate(Native Method)
07-18 23:58:32.457: ERROR/AndroidRuntime(25513):     at android.graphics.Bitmap.createBitmap(Bitmap.java:468)
07-18 23:58:32.457: ERROR/AndroidRuntime(25513):     at android.graphics.Bitmap.createBitmap(Bitmap.java:435)
07-18 23:58:32.457: ERROR/AndroidRuntime(25513):     at android.graphics.Bitmap.createScaledBitmap(Bitmap.java:340)
07-18 23:58:32.457: ERROR/AndroidRuntime(25513):     at android.graphics.BitmapFactory.finishDecode(BitmapFactory.java:488)
07-18 23:58:32.457: ERROR/AndroidRuntime(25513):     at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:462)
07-18 23:58:32.457: ERROR/AndroidRuntime(25513):     at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:323)
07-18 23:58:32.457: ERROR/AndroidRuntime(25513):     at android.graphics.BitmapFactory.decodeResource(BitmapFactory.java:346)
07-18 23:58:32.457: ERROR/AndroidRuntime(25513):     at android.graphics.BitmapFactory.decodeResource(BitmapFactory.java:372)
07-18 23:58:32.457: ERROR/AndroidRuntime(25513):     at com.Waldev.cannontrial.CannonBlast$panel.<init>(CannonBlast.java:136)
07-18 23:58:32.457: ERROR/AndroidRuntime(25513):     at com.Waldev.cannontrial.CannonBlast.onCreate(CannonBlast.java:41)
07-18 23:58:32.457: ERROR/AndroidRuntime(25513):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
07-18 23:58:32.457: ERROR/AndroidRuntime(25513):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
07-18 23:58:32.457: ERROR/AndroidRuntime(25513):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
07-18 23:58:32.457: ERROR/AndroidRuntime(25513):     at android.app.ActivityThread.access$2300(ActivityThread.java:125)
07-18 23:58:32.457: ERROR/AndroidRuntime(25513):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
07-18 23:58:32.457: ERROR/AndroidRuntime(25513):     at android.os.Handler.dispatchMessage(Handler.java:99)
07-18 23:58:32.457: ERROR/AndroidRuntime(25513):     at android.os.Looper.loop(Looper.java:123)
07-18 23:58:32.457: ERROR/AndroidRuntime(25513):     at android.app.ActivityThread.main(ActivityThread.java:4627)
07-18 23:58:32.457: ERROR/AndroidRuntime(25513):     at java.lang.reflect.Method.invokeNative(Native Method)
07-18 23:58:32.457: ERROR/AndroidRuntime(25513):     at java.lang.reflect.Method.invoke(Method.java:521)
07-18 23:58:32.457: ERROR/AndroidRuntime(25513):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
07-18 23:58:32.457: ERROR/AndroidRuntime(25513):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
07-18 23:58:32.457: ERROR/AndroidRuntime(25513):     at dalvik.system.NativeStart.main(Native Method)
07-18 23:58:32.487: WARN/ActivityManager(85):   Force finishing activity com.Waldev.cannontrial/.CannonBlast
07-18 23:58:32.457:错误/AndroidRuntime(25513):致命异常:main
07-18 23:58:32.457:错误/AndroidRuntime(25513):java.lang.OutOfMemoryError:位图大小超出VM预算
07-18 23:58:32.457:ERROR/AndroidRuntime(25513):在android.graphics.Bitmap.nativeCreate(本机方法)上
07-18 23:58:32.457:ERROR/AndroidRuntime(25513):在android.graphics.Bitmap.createBitmap(Bitmap.java:468)
07-18 23:58:32.457:ERROR/AndroidRuntime(25513):在android.graphics.Bitmap.createBitmap(Bitmap.java:435)
07-18 23:58:32.457:ERROR/AndroidRuntime(25513):在android.graphics.Bitmap.createScaledBitmap(Bitmap.java:340)上
07-18 23:58:32.457:ERROR/AndroidRuntime(25513):在android.graphics.BitmapFactory.finishDecode(BitmapFactory.java:488)
07-18 23:58:32.457:ERROR/AndroidRuntime(25513):在android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:462)
07-18 23:58:32.457:ERROR/AndroidRuntime(25513):在android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:323)上
07-18 23:58:32.457:ERROR/AndroidRuntime(25513):在android.graphics.BitmapFactory.decodeResource(BitmapFactory.java:346)上
07-18 23:58:32.457:ERROR/AndroidRuntime(25513):在android.graphics.BitmapFactory.decodeResource(BitmapFactory.java:372)上
07-18 23:58:32.457:ERROR/AndroidRuntime(25513):在com.Waldev.cannontrial.CannonBlast$面板上。(CannonBlast.java:136)
07-18 23:58:32.457:ERROR/AndroidRuntime(25513):位于com.Waldev.cannontral.CannonBlast.onCreate(CannonBlast.java:41)
07-18 23:58:32.457:ERROR/AndroidRuntime(25513):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
07-18 23:58:32.457:ERROR/AndroidRuntime(25513):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
07-18 23:58:32.457:ERROR/AndroidRuntime(25513):位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
07-18 23:58:32.457:ERROR/AndroidRuntime(25513):在android.app.ActivityThread.access$2300(ActivityThread.java:125)
07-18 23:58:32.457:ERROR/AndroidRuntime(25513):在android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
07-18 23:58:32.457:ERROR/AndroidRuntime(25513):位于android.os.Handler.dispatchMessage(Handler.java:99)
07-18 23:58:32.457:ERROR/AndroidRuntime(25513):在android.os.Looper.loop(Looper.java:123)上
07-18 23:58:32.457:ERROR/AndroidRuntime(25513):位于android.app.ActivityThread.main(ActivityThread.java:4627)
07-18 23:58:32.457:ERROR/AndroidRuntime(25513):位于java.lang.reflect.Method.invokenactive(本机方法)
07-18 23:58:32.457:ERROR/AndroidRuntime(25513):位于java.lang.reflect.Method.invoke(Method.java:521)
07-18 23:58:32.457:ERROR/AndroidRuntime(25513):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
07-18 23:58:32.457:ERROR/AndroidRuntime(25513):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
07-18 23:58:32.457:ERROR/AndroidRuntime(25513):在dalvik.system.NativeStart.main(本机方法)
07-18 23:58:32.487:WARN/ActivityManager(85):强制完成活动com.Waldev.cannontrial/.CannonBlast

我不知道它为什么会这样做,我以为我已经彻底结束了游戏,但这甚至不是问题,因为我的父母甚至不能打开游戏。是不是有什么原因导致了这种情况的发生?我在清单中添加了一些类似finishOnTaskLaunch之类的东西,但似乎没有什么可以补救这种情况。有什么想法吗?你还需要什么来看看可能发生了什么,我会一直努力解决这个问题,直到它完成,所以我会很快评论。提前感谢

尝试以下问题:


顺便说一下,你的问题可能已经结束了,因为它是重复的。但是我链接到的问题和解决方案应该可以帮助您。

这取决于您加载和管理位图的方式。(例如,您确定没有在每次调用
onDraw()
时重新加载位图吗?)

您还可以通过在加载过程中增加样本大小来减少位图占用的内存量:

Context c = myActivity; // Some activity
BitmapFactory.Options options = new BitmapFactory.Options();

// 4 here means your resulting bitmap will be 1/4 width and height => 1/16 size
options.inSampleSize = 4; // Powers of 2 are better

BitmapFactory.decodeResource(c.getResources(), R.drawable.sample_bitmap, options);

该链接的可能重复并不能解释为什么它会像在机器人上一样在游戏中停止,它除了显示一些位图之外什么都不会做,然后就消失了:/I我在大多数位图上使用缩放位图,这不是同一件事吗?嗯。。我将假设inSampleSize实际上读取的数据较少,而ScaledBramp仅在渲染期间对其进行缩放,保留100%的数据。不过我可能错了。测试后的另一个注意事项是:增加inSampleSize确实会在物理上减少生成的位图的尺寸,因此您必须将其缩放到其目标大小。好的,谢谢,我会尝试一下,但是您是否有任何理由认为它会在重新进入某些手机时消失,而在其他手机上尝试启动游戏时消失?我不认为droid和nexusI之间有那么大的内存差异我想不出任何明确的原因为什么它会在两部不同的手机上崩溃,对不起!您也可以尝试在选项中分配临时存储:Hrmmmm,好吧,谢谢,一个小于1/2MB的程序正在扼杀手机,这感觉很奇怪,哈哈,我正在浏览一些开源的东西,看看是否有什么我可能错过的主要内容