Log.wtf与未处理的异常

时间:2016-09-30 17:54:58

标签: android

我刚刚了解了Log.wtf("多么可怕的失败" lol),我想知道何时应该使用它。

  1. 使用异常调用Log.wtf和异常处理(崩溃)之间有什么区别?
  2. 它如何影响Google Play开发者控制台中的崩溃报告?
  3. 我通常会因意外情况而抛出IllegalStateException。我应该考虑改为拨打Log.wtf吗?
  4. 修改

    另请参阅:Under what circumstances will Android's Log.wtf terminate my app?

2 个答案:

答案 0 :(得分:4)

Log.wtf做的是在日志中写入异常及其堆栈跟踪,并且只有那样。它既不会捕获也不会抛出异常。所以

<击>
    <击>
  1. 区别在于是否记录了异常。该例外仍未处理。

  2. 它不会影响崩溃报告。

  3. 如果您想记录它,请继续。但是你要继续投掷IllegalStateException

  4. 修改

    我尝试调试并踩到Log.wtf,但没有运气。

    我发现的内容几乎与链接问题的答案相同。似乎在“默认的可怕故障处理”Log.wtf中创建了一个内部异常(TerribleFailure),它包装了任何给定的异常。然后它调用RuntimeInit.wtf()。它的javadoc说:

      

    报告当前流程中的严重错误。可能或可能不会导致   终止的过程(取决于系统设置)。

    我想Log.wtf的行为取决于设备制造商。我的索尼C6503似乎没有引起任何异常或杀死这个过程。

    一些开源参考:

    https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/util/Log.java

    https://android.googlesource.com/platform/frameworks/base/+/master/core/java/com/android/internal/os/RuntimeInit.java

答案 1 :(得分:0)

默认情况下不记录未处理的异常。 Log.wtf可能会也可能不会使应用程序崩溃。如果您将异常传递给Log.wtf并且它崩溃了,那么您应该获得类似于未处理异常时所获得的堆栈跟踪。在调用Log.wtf之后,如果你想确保崩溃(当然没有捕获它),你应该(重新)抛出异常。

Log.wtf可能有特定用例,但如果您不确定,最好使用Log.e