2016-09-30 443 views

回答

4

Log.wtf做什么是写异常,在日志中的堆栈跟踪,并且仅此而已。它既不捕捉也不抛出异常。所以

  1. 不同之处在于是否记录异常。异常仍未处理。

  2. 它不影响崩溃报告。

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

编辑

我试着调试和步入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

+0

也许Log.wtf不会抛出异常,但至少有时会终止应用程序。如果它没有通过抛出异常终止,那么会影响崩溃报告,如果我得到一个。 – cambunctious

+0

@cambunctious是的,也许如此。从我链接的代码中,Android内部处理异常并在某些情况下终止进程 – nandsito

+0

Log.wtf的实现是否有可能在不崩溃的情况下终止应用并导致崩溃报告? – cambunctious

0

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

对于Log.wtf可能有特定的使用情况,但如果您不确定,最好使用Log.e代替。