2016-09-30 5 views
8

Я только что узнал о Log.wtf («Что такое ужасная неудача»), и мне интересно, когда я должен его использовать.Log.wtf vs. Unhandled Exception

  1. В чем разница между вызовом Log.wtf и исключение исключения (необработанное)?
  2. Как это повлияет на отчеты о сбоях в консоли разработчика Google Play?
  3. Я обычно бросаю IllegalStateException для неожиданных условий. Должен ли я использовать вместо этого вызов Log.wtf?

Edit:

Смотрите также: 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 вы должны (re) выбросить исключение, если вы хотите обеспечить сбой (не зацепив его, конечно).

Возможны конкретные варианты использования для Log.wtf, но если вы не уверены, вероятно, лучше использовать Log.e.

Смежные вопросы