我在使用Corona SDK时遇到了一些问题,他们的Android编码器声称该错误是在Java或Android中拒绝捕获异常而是崩溃。
我之前从未听说过,所以,如果他们说的是真的,可以纠正吗?
特别是我的问题:http://forums.coronalabs.com/topic/34688-how-i-load-a-16-bit-image
总结:
我正在尝试使用Corona SDK加载2048x2048图像。我可以用Marmalade SDK和原生Java做到这一点,但是使用Corona它会在Android 2.3上的Nexus One和Xperia Play(以及可能还有许多其他未经测试的设备)崩溃
我向他们提交了一个错误报告,他们的答复是他们有很多依赖于Java代码上的try catch块的回退,但是在崩溃的设备上,它会崩溃而不是触发catch块,或者它默默地失败并完全跳过catch块。
我想知道如何解决这个问题(崩溃或跳过而不是触发catch块)
答案 0 :(得分:4)
首先,这不是Java(TM)问题。这是Android问题,与以下一项或多项有关:
如果问题是(Davlik)VM崩溃的结果,那么在触发问题后,您的应用程序无法执行任何操作。当DVM崩溃时,那就是“游戏结束”。没有例外。实际上,在重新启动之前不会再执行Java代码。
当VM自身进入无法安全继续的状态时,DVM(和JVM)仅崩溃。通常,您会遇到某种内存损坏或触发硬件异常(segvs,非法指令等)。普通的纯Java代码无法实现这一点......除非存在平台错误。本机代码可以实现它。
谁是如此责备?
你可以做什么?
工作量可能是增加应用程序的堆分配(如果可能的话)或修改应用程序的工作方式,以便它不会尝试将大图像加载到内存中走。让我们面对它,Android手机没有大量的内存,并且堆的最大大小限制了应用程序可以做的事情。大图像需要很多堆空间。
<强>更新强>
鉴于您提供的额外背景,我认为解决方法最好。只是不要尝试加载巨大的图像。找另一种方式。