我刚刚向Android市场发布了我的应用程序的新版本,我的新版本在活动中有一个GLSurfaceView。虽然我没有做任何花哨的事情,但我拥有庞大的用户群,那里有很多不合规格的Android手机,而且我总是在GLThread.run()中获得异常。
在不崩溃整个应用程序的情况下,捕获/处理这些异常的建议方法是什么?理想情况下,我希望能够捕获错误,从活动中删除表面视图并关闭使用OpenGL的组件。我做了一些搜索,但大多数发现Android上的Firefox的异常报告和类似的东西。 :)
我正在考虑使用未捕获的异常处理程序,将共享首选项标志切换为false,并让它崩溃;下一次运行我不会尝试添加GLSurfaceView。
答案 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);
});