Log.wtf与未处理的exception

我刚刚了解到Log.wtf (“多么可怕的失败”),我想知道什么时候应该使用它。

  1. 调用Log.wtf和exception之间有什么区别,并让exception处理(崩溃)?
  2. 它如何影响Google Play开发者控制台中的崩溃报告?
  3. 我通常会针对意外情况抛出IllegalStateException 。 我应该考虑调用Log.wtf吗?

编辑:

另请参阅: 在什么情况下Android的Log.wtf终止我的应用程序?

Solutions Collecting From Web of "Log.wtf与未处理的exception"

Log.wtf所做的是将exception及其堆栈跟踪写入日志中,仅此。 它既不捕捉也不抛出exception。 所以

  1. 不同之处在于是否loggingexception。 exception仍然未处理。

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

  3. 如果你想logging它,继续。 但是你会想继续抛出IllegalStateException

编辑

我试着debugging,并进入Log.wtf但没有运气。

我发现的东西几乎是在链接问题中回答的。 看来,在“默认的可怕的失败处理” Log.wtf创build一个内部exception( TerribleFailure )包装任何给定的exception。 然后它调用RuntimeInit.wtf() 。 它的javadoc说:

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

我猜Log.wtf的行为Log.wtf设备制造商。 我的索尼C6503似乎没有提出任何exception或杀死的过程。

一些开源参考:

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

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

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