-1

我在使用 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 块)

4

1 回答 1

4

首先,这不是 Java (TM) 问题。这是与以下一项或多项相关的 Android 问题:

  • 通用 Android 平台(不太可能)
  • 您手机的特定 Android 端口,或
  • 3rd 方本机代码扩展。

如果问题是 (Davlik) VM 崩溃的结果,那么在触发问题后您的应用程序将无能为力。当 DVM 崩溃时,这就是“游戏结束”。不会捕获任何异常。事实上,在您重新启动之前,不会再执行 Java 代码。

DVM(和 JVM)只有在 VM 进入无法安全继续的状态时才会崩溃。通常,您会遇到某种内存损坏或触发硬件异常(segv、非法指令等)的情况。普通的纯 Java 代码无法实现这一点……除非存在平台错误。本机代码可以实现它。

这么怪谁?

  • 如果 Corona 包含本机代码库,则可能是它们的错误。否则不行。(如果他们的代码是“纯”Java 代码并且发生了 VM 崩溃,则不是他们造成的,也无法从中恢复。见上文。)
  • 如果您有其他 3rd 方本机代码处于活动状态,那可能是罪魁祸首。
  • 否则,故障很可能出在您设备的特定 Android 端口上。

你可以做什么?

  • 检查 Corona 是否包含本机代码库。
  • 尝试在制造商的网站上查找错误报告和修复或解决方法。(这听上去可能是垃圾回收区的BUG,不过故障转储里应该有更多线索。)
  • 换个新手机。可悲的是,许多无线电话网络没有为旧的安卓手机提供及时的更新......如果你相信这一点: http: //arstechnica.com/security/2013/04/wireless-carriers-deceptive-and-unfair/
  • 投诉。它可能无济于事,但它可能会让你感觉更好:-)

解决方法可能是增加应用程序的堆分配(如果可能的话)或修改应用程序的工作方式,使其不会尝试一次性将大图像加载到内存中。让我们面对现实吧,Android 手机没有大量内存,并且堆的最大大小限制了应用程序的功能。大图像占用大量堆空间。

更新

鉴于您提供的额外上下文,我认为解决方法是最好的。只是不要尝试加载巨大的图像。寻找另一种方式。

于 2013-05-08T01:37:46.830 回答