Devrais-je supprimer E. printStackTrace () de mon code avant publication
je lisais les Docs de publication Android et ils ont dit de supprimer tous les appels Log de mon code. J'ai quelques appels à e.printStackTrace()
dans mon code qui peut être imprimé dans le cadre du fonctionnement normal de mon programme (ie. si un fichier n'existe pas encore).
dois-je également supprimer ces appels?
8 réponses
vous ne devriez pas utiliser e.printStackTrace()
directement de toute façon - faire ainsi enverra l'information au journal Android sans afficher quelle application (étiquette de journal) il est venu.
comme d'autres l'ont mentionné, continuer à attraper le Exception
en question, mais utiliser l'une des méthodes android.util.Log
pour faire l'enregistrement. Vous pouvez enregistrer seulement le message, mais pas la trace de la pile, ou utiliser la journalisation verbeuse pour la trace de la pile:
try {
Object foo = null;
foo.toString();
} catch (NullPointerException ex) {
Log.w(LOG_TAG, "Foo didn't work: "+ ex.getMessage());
Log.d(LOG_TAG, Util.stackTraceWriter(ex));
}
vous devriez rayer les messages de log DEBUG
ou VERBOSE
de vos constructions de production. La façon la plus facile est de utiliser ProGuard pour supprimer Log.[dv]
appels de votre code.
si vous autorisez une Exception à se propager jusqu'au système D'exploitation, alors le système d'exploitation le logera et affichera également une fenêtre de fermeture forcée, tuant votre application. Si vous l'attrapez, alors vous pouvez empêcher votre application d'être fermée par la force.
si vous voulez que vos utilisateurs aient la possibilité de vous envoyer les erreurs qu'ils reçoivent, alors je logerai la trace de la pile. Ils peuvent ensuite vous envoyer le journal via une application comme Log Collector .
Si vous voulez éviter la possibilité d'exposer vos informations de trace de pile à vos utilisateurs, puis attraper l'exception et ne pas se connecter.
j'utiliserais la classe Log pour le message out put. Pour les journaux que vous pensez sont importants de rester dans le journal d'utilisation de l'application.je pour les erreurs d'avertissement - Journal.E Log.W Pour vous le Journal de débogage.d - et que vous pouvez désactiver sur la base si votre application est en mode de débogage.
http://developer.android.com/reference/android/util/DebugUtils.html
Well printStackTrace()
va le logger dans le système D'exploitation, provoquant l'arrêt de votre application andorid (ou ordinateur), à la place, faire quelque chose comme ceci:
public void nullPointerExceptionCauser()
{
try
{
Object example = null;
example.toString();
}
catch (Exception e)
{
Logger.log(Level.SEVERE, "Caught Exception: {0}", e.getStackTrace());
}
}
dans mon modeste avis (je ne suis pas un développeur Android)
ça devrait être sympa. Je ne sais pas les options de journalisation pour Android, mais je suis sûr que vous avez quelque chose configurable à la sortie (ou pas) Vos traces.
et si vous ne faites pas printStackTrace() Android ne fera pas le sale travail de l'ignorer.
:)
C'est seulement un bon sentiment (de style).
si vous voulez être en sécurité, c'est-à-dire ne pas laisser quiconque espionner pour lire les journaux d'exception, vous pouvez faire quelque chose comme
private void hideExceptionsInReleaseMode()
{
final Thread.UncaughtExceptionHandler defaultHandler = Thread.getDefaultUncaughtExceptionHandler();
if(!BuildConfig.DEBUG)
{
Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler()
{
@Override
public void uncaughtException(Thread thread, Throwable ex)
{
defaultHandler.uncaughtException(thread, new RuntimeException("Something went wrong :p"));
}
});
}
}
pour utiliser printStackTrace
d'une manière plus sûre, j'utiliserais StringWrite
et PrintWriter
:
...
catch (final Exception e)
{
final StringWriter sw = new StringWriter();
final PrintWriter pw = new PrintWriter(sw);
e.printStackTrace(pw);
Log.e("TAG", sw.toString());
}
ou alternativement:
catch (final Exception e)
{
Log.e(TAG, Log.getStackTraceString(e));
}
utilisez ceci pour supprimer les journaux de la version apk
if (BuildConfig.DEBUG) Log.d(TAG, "your meseage");