处理GLThread.run()中的错误

时间:2012-10-06 20:45:06

标签: android opengl-es-2.0

我刚刚向Android市场发布了我的应用程序的新版本,我的新版本在活动中有一个GLSurfaceView。虽然我没有做任何花哨的事情,但我拥有庞大的用户群,那里有很多不合规格的Android手机,而且我总是在GLThread.run()中获得异常。

在不崩溃整个应用程序的情况下,捕获/处理这些异常的建议方法是什么?理想情况下,我希望能够捕获错误,从活动中删除表面视图并关闭使用OpenGL的组件。我做了一些搜索,但大多数发现Android上的Firefox的异常报告和类似的东西。 :)

我正在考虑使用未捕获的异常处理程序,将共享首选项标志切换为false,并让它崩溃;下一次运行我不会尝试添加GLSurfaceView。

1 个答案:

答案 0 :(得分:2)

我最终使用以下代码解决了这个问题:

final UncaughtExceptionHandler defaultHandler = Thread.getDefaultUncaughtExceptionHandler();

Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() {
    @Override
    public void uncaughtException(Thread thread, Throwable ex) {
        if (thread.getName().startsWith("GLThread")) {
            disableOpenGLStuff();
        }

        // You could wrap this in an else, but I'm not sure how good of an idea it is to leave the application running when a thread has crashed.
        defaultHandler.uncaughtException(thread, ex);
    });