我刚刚了解到Log.wtf
(“多么可怕的失败”哈哈),我想知道什么时候该使用它。Log.wtf与未处理的异常
- 打电话给
Log.wtf
发生异常并让异常处理(崩溃)有什么区别? - 它如何影响Google Play开发者控制台中的崩溃报告?
- 我通常会针对意外情况抛出
IllegalStateException
。我应该考虑拨打Log.wtf
吗?
编辑:
参见:Under what circumstances will Android's Log.wtf terminate my app?
我刚刚了解到Log.wtf
(“多么可怕的失败”哈哈),我想知道什么时候该使用它。Log.wtf与未处理的异常
Log.wtf
发生异常并让异常处理(崩溃)有什么区别?IllegalStateException
。我应该考虑拨打Log.wtf
吗?编辑:
参见:Under what circumstances will Android's Log.wtf terminate my app?
Log.wtf
做什么是写异常,在日志中的堆栈跟踪,并且仅此而已。它既不捕捉也不抛出异常。所以
不同之处在于是否记录异常。异常仍未处理。
它不影响崩溃报告。
如果您想记录它,请继续。但是你会想继续投掷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
未处理的异常默认是不记录。 Log.wtf
可能会或可能不会使应用程序崩溃。如果你传递一个异常到Log.wtf
并且它崩溃了,那么你应该得到一个堆栈跟踪,类似于如果没有处理异常将得到的结果。在调用Log.wtf
之后,如果你想确保崩溃(当然没有捕获它),你应该(重新)抛出一个异常。
对于Log.wtf
可能有特定的使用情况,但如果您不确定,最好使用Log.e
代替。
也许Log.wtf不会抛出异常,但至少有时会终止应用程序。如果它没有通过抛出异常终止,那么会影响崩溃报告,如果我得到一个。 – cambunctious
@cambunctious是的,也许如此。从我链接的代码中,Android内部处理异常并在某些情况下终止进程 – nandsito
Log.wtf的实现是否有可能在不崩溃的情况下终止应用并导致崩溃报告? – cambunctious