2

我是stackoverflow的相对新手。

我在我的 android 应用程序中实现了一个 owne uncaughtException 处理程序。问题是当我的一项活动中发生一个未处理的异常时,方法“uncaughtException”被多次调用。

这是我全班负责处理未捕获的异常:

public class CustomUncaughtExceptionHandler implements java.lang.Thread.UncaughtExceptionHandler {

 private UncaughtExceptionHandler defaultUEH;
public CustomUncaughtExceptionHandler(UncaughtExceptionHandler defaultHandler) {

    defaultUEH = defaultHandler;
    Log.w("cmhandler","setted default UEH");
}

public void uncaughtException(Thread thread, Throwable exception) {
    Log.w("cmhandler","uncaughtException");
    Helper.Log_e("CustomUncaughtExceptionHandler", "uncaughtException", exception);

    defaultUEH.uncaughtException(thread, exception);
}

}

该行Helper.Log_e("CustomUncaughtExceptionHandler", "uncaughtException", exception);仅将异常保存在文件中,并且没有抛出异常。

我在我的活动中实现了这个类,如下所示:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Thread.setDefaultUncaughtExceptionHandler(new CustomUncaughtExceptionHandler(Thread.getDefaultUncaughtExceptionHandler()));

当我运行我的应用程序并在活动的 oncreate 中插入类似的内容时(在上面的代码之后)

String i = null;
    i.length();

异常得到正确处理,并且 FC 对话框也弹出。到目前为止一切顺利,但在查看我的日志后,我发现方法 uncaughtException 被多次调用。

编辑:通常该方法被调用 2-6 次,并且来自 defaultUEH 设置的日志仅在日志中出现一次。

还有其他人有这样的行为吗?或者有没有人暗示我做错了什么?

谢谢,最好的问候 schw4ndi

4

1 回答 1

0

我的错误是我在 onCreate 的 evrey 活动中设置了默认的例外处理程序,所以通过调用 getDefaultExceptionHandler 我得到了 previos 设置的 customExceptionHandler。

我现在通过将课程设置为单例来解决它。所以默认处理程序只设置一次。

于 2013-02-28T09:13:22.200 回答