Неплохо ли использовать printStackTrace() в исключениях для Android?
} catch (Exception e) {
e.printStackTrace();
}
Неплохо ли использовать printStackTrace() в исключениях для Android?
} catch (Exception e) {
e.printStackTrace();
}
Да, это плохая идея. Вместо этого вы должны использовать встроенный класс журнала Android, специально предназначенный для этих целей: http://developer.android.com/reference/android/util/Log.html
Он дает вам возможность регистрировать отладочные сообщения, предупреждения, ошибки и т.д.
Я считаю, что это то, что вам нужно:
catch (Exception e) {
Log.e(TAG,Log.getStackTraceString(e));
}
Да. printStackTrace()
удобен, но обескуражен, особенно на Android, где он отображается через logcat
, но регистрируется на неопределенном уровне и без правильного сообщения. Вместо этого правильный способ регистрации исключения...
Log.e(TAG, "Explanation of what was being attempted", e);
Обратите внимание, что исключение используется в качестве третьего параметра, не добавляемого к параметру сообщения. Log
обрабатывает детали для вас - печатает ваше сообщение (которое дает контекст того, что вы пытались сделать в своем коде) и сообщение Exception
, а также его трассировку стека.
Вопрос: полезен ли вообще для печати трассировка стека в контексте приложения Andriod? Будет ли стандартный вывод отображаться во время выполнения? Кто-нибудь позаботится об этом?
Я хочу сказать, что если никто не будет проверять стандартный вывод и не будет отлаживать ошибку, вызов этого метода будет мертвым кодом, а составление сообщения stacktrace - бесполезный расход. Если вам это нужно только для отладки при разработке, вы можете установить доступную глобальную константу и проверить ее во время выполнения:
} catch (Exception e) {
if(com.foo.MyEnvironmentConstants.isDebugging()) {
e.printStackTrace();
} //else do noting
}
Я бы не использовал printStackTrace()
, использовал систему регистрации и поддержку исключений.
log.log(Level.SEVERE, "Uncaught exception", e);
Итак, если вы хотите изменить способ ведения журнала, это намного проще.