Est-ce une mauvaise idée d'utiliser printStackTrace () dans Android Exceptions comme celle-ci?
} catch (Exception e) {
e.printStackTrace();
}
Oui, c'est une mauvaise idée. Vous devez plutôt utiliser la classe de journaux intégrée d'Android spécialement conçue à ces fins: http://developer.Android.com/reference/Android/util/Log.html
Il vous donne des options pour enregistrer les messages de débogage, les avertissements, les erreurs, etc.
Erreurs de journalisation avec:
Log.e(TAG, "message", e)
où le message peut être une explication de ce qui était tenté lorsque l'exception a été levée
ou simplement Log.e(TAG, e)
si vous ne souhaitez pas fournir de message pour le contexte
Vous pouvez ensuite cliquer sur la console de journal en bas pendant l'exécution de votre code et le rechercher facilement en utilisant le type de message TAG ou log comme filtre
Je crois que c'est ce dont vous avez besoin:
catch (Exception e) {
Log.e(TAG,Log.getStackTraceString(e));
}
Oui. printStackTrace()
est pratique mais déconseillé, en particulier sur Android où il est visible à travers logcat
mais est enregistré à un niveau non spécifié et sans message approprié. Au lieu de cela, la bonne façon de consigner une exception est ...
Log.e(TAG, "Explanation of what was being attempted", e);
Notez que l'exception est utilisée comme troisième paramètre, non ajoutée au paramètre de message. Log
gère les détails pour vous - l'impression de votre message (qui donne le contexte de ce que vous essayez de faire dans votre code) et le message de Exception
, ainsi que sa trace de pile.
Je voudrais éviter d'utiliser printStackTrace()
, utiliser un système de journalisation et son support des exceptions.
log.log(Level.SEVERE, "Uncaught exception", e);
Donc, si vous voulez changer la façon dont la journalisation est gérée, c'est beaucoup plus facile.
La question est: est-il utile d'imprimer sur la trace de la pile dans un contexte d'application Andriod? La sortie standard sera-t-elle visible lors de l'exécution? Quelqu'un s'en souciera-t-il?
Mon point est que, si personne ne vérifie la sortie standard et ne souhaite déboguer l'erreur, l'appel à cette méthode est du code mort et la composition du message stacktrace est une dépense sans valeur. Si vous en avez besoin uniquement pour le débogage au cours du développement, vous pouvez définir une constante globale accessible et la vérifier lors de l'exécution:
} catch (Exception e) {
if(com.foo.MyEnvironmentConstants.isDebugging()) {
e.printStackTrace();
} //else do noting
}