2016-09-30 21 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代替。