2016-09-30 13 views
8

私はちょうどLog.wtfについて学びました(「何がひどい失敗か」)、私はそれをいつ使うべきか疑問に思っています。Log.wtf対処理されない例外

  1. 例外を伴うLog.wtfの呼び出しと例外の処理(クラッシュ)の違いは何ですか?
  2. Google Playデベロッパーコンソールのクラッシュレポートにはどのような影響がありますか?
  3. 私は通常予期しない状況のためIllegalStateExceptionを投げます。代わりにLog.wtfを呼び出すことを検討すべきですか?

編集:

も参照してください:Under what circumstances will Android's Log.wtf terminate my app?

答えて

4

Log.wtfログ内の例外とそのスタックトレースを書き、それだけです。それはキャッチも例外もスローされません。したがって

  1. 例外はログに記録されているかどうかです。例外は未処理のままです。

  2. クラッシュレポートには影響しません。

  3. ログに記録する場合は、先に進んでください。しかし、あなたはIllegalStateExceptionを投げつけ続けたいと思うでしょう。

EDIT

私は、デバッグを試してみましたが、Log.wtfが、運に足を踏み入れます。

私が見つけたのは、リンクされた質問の答えがかなりあります。 "デフォルトの恐ろしいエラー処理"では、Log.wtfは任意の例外をラップする内部例外(TerribleFailure)を作成するようです。その後、RuntimeInit.wtf()が呼び出されます。そのjavadocは言う:

現在のプロセスで深刻なエラーを報告します。 プロセスが終了することがあります(システム設定によって異なります)。

Log.wtfの動作は、デバイスの製造元によって異なります。私のSony 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を使用する方が良いでしょう。

関連する問題