Androidこのような例外でprintStackTrace()を使用するのは悪い考えですか?
} catch (Exception e) {
e.printStackTrace();
}
はい、それは悪い考えです。代わりに、これらの目的のために特別に設計されたAndroidの組み込みログクラスを使用する必要があります。 http://developer.Android.com/reference/Android/util/Log.html
デバッグメッセージ、警告、エラーなどを記録するオプションを提供します。
エラーのロギング:
Log.e(TAG, "message", e)
ここで、メッセージは、例外がスローされたときに試行された内容の説明になります。
または単にコンテキストにメッセージを提供したくない場合はLog.e(TAG, e)
その後、コードの実行中に下部のログコンソールをクリックし、TAGまたはログメッセージタイプをフィルターとして使用して簡単に検索できます
私はこれがあなたが必要とするものだと信じています:
catch (Exception e) {
Log.e(TAG,Log.getStackTraceString(e));
}
はい。 printStackTrace()
は便利ですが、特にAndroidでlogcat
を介して表示されますが、適切なメッセージなしで指定されていないレベルでログに記録されます。例外を記録する適切な方法は...
Log.e(TAG, "Explanation of what was being attempted", e);
例外は、メッセージパラメーターに追加されるのではなく、3番目のパラメーターとして使用されることに注意してください。 Log
が詳細を処理します–メッセージ(コードで実行しようとしていたことのコンテキストを提供します)とException
のメッセージ、およびスタックトレースを出力します。
printStackTrace()
の使用を避け、ロギングシステムとその例外のサポートを使用します。
log.log(Level.SEVERE, "Uncaught exception", e);
したがって、ロギングの処理方法を変更する場合は、はるかに簡単です。
質問は次のとおりです。Andriodアプリケーションコンテキストのスタックトレースへの出力はすべて役に立ちますか?実行時に標準出力が表示されますか?誰かがそれを気にしますか?
私のポイントは、誰も標準出力をチェックせず、エラーのデバッグに注意を払わない場合、このメソッドの呼び出しはデッドコードであり、スタックトレースメッセージの作成は価値のない費用であるということです。開発時のデバッグにのみ必要な場合は、アクセス可能なグローバル定数を設定し、実行時に確認できます。
} catch (Exception e) {
if(com.foo.MyEnvironmentConstants.isDebugging()) {
e.printStackTrace();
} //else do noting
}