Log.wtf und nicht behandelte Ausnahme

8

Ich habe gerade von Log.wtf (" Was für ein schreckliches Versagen "lol) und ich frage mich, wann ich es benutzen sollte.

  1. Was ist der Unterschied zwischen dem Aufruf von Log.wtf mit einer Ausnahme und dem Absetzen einer Ausnahme (crash)?
  2. Wie wirkt sich dies auf Absturzberichte in der Google Play Developer Console aus?
  3. Normalerweise gebe ich IllegalStateException für unerwartete Bedingungen ein. Soll ich stattdessen Log.wtf aufrufen?

Bearbeiten:

Siehe auch: Unter welchen Umständen wird Android's Log .wtf meine App beenden?

    
cambunctious 30.09.2016, 17:54
quelle

2 Antworten

4

Was Log.wtf tut, ist die Ausnahme und seinen Stack-Trace in dem Protokoll schreiben, und nur diese. Es fängt keine Exceptions ab und wirft sie auch nicht ab. Also

  1. Der Unterschied besteht darin, dass die Ausnahme protokolliert wird oder nicht. Die Ausnahme bleibt unbehandelt.

  2. Es hat keine Auswirkungen auf Absturzberichte.

  3. Wenn Sie es protokollieren möchten, gehen Sie voran. Aber du willst weiterhin IllegalStateException werfen.

BEARBEITEN

Ich habe versucht, das Debuggen und Schritt in Log.wtf , aber kein Glück.

Was ich gefunden habe, ist ziemlich genau, was in der verknüpften Frage beantwortet wird. Es scheint, dass in dem „Standard schreckliche Fehlerbehandlung“ Log.wtf erstellt eine interne Ausnahme ( TerribleFailure ), die jede gegebene Ausnahme umschließt. Dann ruft es RuntimeInit.wtf() auf. Sein Javadoc sagt:

  

Melden Sie einen schwerwiegenden Fehler im aktuellen Prozess. Kann oder darf nicht verursachen   der Prozess zum Beenden (hängt von den Systemeinstellungen ab).

Ich denke, das Verhalten von Log.wtf liegt beim Gerätehersteller. My Sony C6503 scheint keine Ausnahme zu erhöhen oder den Prozess zu töten.

Einige Open-Source-Referenz:

Ссылка

Ссылка

    
nandsito 30.09.2016 18:05
quelle
0

Nicht behandelte Ausnahmen werden nicht standardmäßig protokolliert. Log.wtf kann die Anwendung abstürzen lassen oder nicht. Wenn Sie eine Exception an Log.wtf übergeben und es abstürzt, sollten Sie eine Stack-Ablaufverfolgung erhalten, die der ähnelt, die Sie erhalten würden, wenn die Ausnahme nicht behandelt würde. Nachdem Sie Log.wtf aufgerufen haben, sollten Sie (erneut) eine Exception werfen, wenn Sie einen Absturz sicherstellen wollen (ohne es natürlich abzufangen).

Es kann spezielle Anwendungsfälle für Log.wtf geben, aber wenn Sie sich nicht sicher sind, ist es wahrscheinlich besser, stattdessen Log.e zu verwenden.

    
cambunctious 30.09.2016 20:50
quelle

Tags und Links