2

我刚刚向 Android 市场发布了我的应用程序的新版本,并且我的新版本在活动中具有 GLSurfaceView。尽管我没有做任何花哨的事情,但我拥有庞大的用户群,那里有很多不合标准的 Android 手机,而且我总是在 GLThread.run() 中遇到异常。

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

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

4

1 回答 1

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);
    });
于 2012-10-08T22:12:39.010 回答