Domanda

E 'una cattiva idea di utilizzare printStackTrace () in Eccezioni Android come questo?

} catch (Exception e) {
    e.printStackTrace();
}
È stato utile?

Soluzione

Sì, è una cattiva idea. Si dovrebbe invece usare Android classe incorporata registro appositamente per questi scopi: http: / /developer.android.com/reference/android/util/Log.html

Ti dà opzioni per registrare i messaggi di debug, avvertimenti, errori ecc.

Registrazione errori con:

Log.e(TAG, "message", e) in cui il messaggio può essere una spiegazione di ciò che veniva tentato quando l'eccezione è stato gettato

o semplicemente Log.e(TAG, e) se non si desidera fornire alcun messaggio per il contesto

Si può quindi fare clic sulla console di registro in basso durante l'esecuzione il codice e cercare facilmente utilizzando il tipo di messaggio TAG o il registro come un filtro

Altri suggerimenti

Credo che questo sia quello che vi serve:

catch (Exception e) {
     Log.e(TAG,Log.getStackTraceString(e)); 
}

Sì. printStackTrace() è conveniente ma scoraggiato, in particolare su Android in cui è visibile attraverso logcat ma viene registrato ad un livello non specificato e senza un apposito messaggio. Al contrario, il modo corretto di registrare un eccezione è ...

Log.e(TAG, "Explanation of what was being attempted", e);

Si noti che l'eccezione viene utilizzato come terzo parametro, non aggiunto al parametro messaggio. maniglie Log i dettagli per voi. - stampa il messaggio (che dà il contesto di ciò che si stava cercando di fare nel codice) e il messaggio del Exception, così come il suo stack trace

La domanda è: è utile a tutti di stampa per l'analisi dello stack in un contesto di applicazione Andriod? Sarà lo standard output sia visibile in fase di esecuzione? Will cura qualcuno su di esso?

Il mio punto è che, se nessuno sta andando a controllare l'output standard e la cura per eseguire il debug l'errore, la chiamata a questo metodo è codice morto, e comporre il messaggio stacktrace è una spesa inutile. Se ne avete bisogno solo per il debug allo sviluppo, è possibile impostare un costante globale accessibile, e controllare in fase di esecuzione:

} catch (Exception e) {
   if(com.foo.MyEnvironmentConstants.isDebugging()) {
      e.printStackTrace();
   } //else do noting
}

Vorrei evitare di usare printStackTrace(), utilizzare un sistema di registrazione e il suo sostegno di eccezioni.

log.log(Level.SEVERE, "Uncaught exception", e);

Quindi, se si desidera modificare la modalità di registrazione viene gestito è molto più facile.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top