【问题标题】:Android activity silently exitingAndroid活动静默退出
【发布时间】:2011-12-31 12:22:40
【问题描述】:

我的应用程序有一个启动屏幕活动,它启动了一个主要活动的意图,其中有一个 openGL 视图。

一些用户报告游戏退出并返回启动画面。

我确定这是一个错误,但它默默地失败了,所以我没有收到任何崩溃报告。

什么会导致它像这样默默地失败?以这样的方式应用程序循环并且用户看不到强制关闭窗口。

编辑:我已经通过将 noHistory="true" 放入 slapsh 活动的清单中来停止启动画面的重新启动。现在用户只是报告它静默退出。是什么原因造成的?!

Edit2:如果有任何线索,我最近从 SDK r10 更新到 SDK r16,我相信我已经删除了所有其他更改,如果可以的话,我会回到 r10,但我可以没办法。

1 月 19 日编辑:我找到了这个问题的根本原因。在某些时候,谷歌向 SDK 引入了一个名为“png crush”的功能。而且 PowerVR 并不总是乐于加载这些纹理。有关更多信息和解决方案,请参阅我的另一个问题 here

【问题讨论】:

    标签: android opengl-es-2.0


    【解决方案1】:

    没有源代码,很难判断到底发生了什么。尝试在具有不同 API 级别的模拟器上调试,看看是否可以重现。

    如果不能转载,建议你看看ACRABugSense。使用这些 3rd 方崩溃报告插件非常简单,您甚至可以手动报告静默异常。

    【讨论】:

    • 模拟器是不可能的,因为它是 OpenGL 2.0。不过谢谢,我现在已经发布了一个带有 bugsense 的版本。但鉴于我的用户甚至没有看到正常的强制关闭对话框,我不希望它能够捕捉到它。
    • ACRA 更适用于自定义报告,特别是报告不会强制关闭应用程序的静默异常。我不确定 BugSense 是否能捕捉到这些。
    • 是的,bugsense 不好,我在 opengl 线程中测试了一个异常,事情只是冻结了。似乎只从 UI 线程报告。会看 ACRA。
    【解决方案2】:

    您使用的是本机代码吗?因为如果有段错误,它会将堆栈跟踪打印到 logcat,但不会创建 Uncought Exception(所以在这种情况下,像 ACRA 这样的插件是无用的,尽管我可以推荐很多 ACRA)

    【讨论】:

    • 有趣,什么归类为本机代码,我调用了 OpenGL 2 代码,这个段会出错吗?
    • 本机代码将使用 Android-NDK 编译为 C 源代码,以用于您的游戏。但如果你问它是什么,你可能没用过它;-)
    【解决方案3】:

    它也确实发生在我的应用程序中,经常在开发调试期间发生,通常是由于以下问题。

    • GPU 进入内存不足状态,因为使用 VBO 分配的内存过多。这通常取决于并非总是正确释放 VBO 的事实。当它真的发生时,以我的卑微经验,就像托管你的应用程序的虚拟机死了一样。不幸的是,很明显您无法检查用户的 logcat。

    问题非常多变,因为它取决于 GPU 类型和 GPU 可用的内存。 例如,在我的银河选项卡上,它发生在我的基本摩托罗拉 Defy 之后(就加载的关卡和 VBO 而言)。

    这给故障排除带来了很多麻烦。

    :)

    【讨论】:

    • 确实很有趣!调查有问题的设备,它们都是机器人和 Galaxy 的设备,它们都有一个通用/相似的 GPU,PowerVR SGX 540 和 SGX 530。我非常感谢您在 VBO 和您的星系标签(我相信它也有那个GPU)。看起来很适合你 +100!
    【解决方案4】:

    只有一种方法可以重写默认异常行为 - UncaughtExceptionHandler。您可以创建自己的类 ExceptionHandler implements UncaughtExceptionHandler 并处理任何您想要的异常 - 将其发送到您的远程服务器或其他。要注册它,您应该创建Application 类:

    public class YourApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler(this.getApplicationContext()));
        }
    }
    

    并在你的清单文件中注册这个类

    <application 
        android:name="your.package.name.YourApplication" 
        ... >
             ...
    </application>
    

    【讨论】:

    • 谢谢,但我确信没有抛出异常,否则用户会看到强制关闭消息框。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    相关资源
    最近更新 更多