我剛剛瞭解到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