我在这里读到不e.printStackTrace()
应该用于在 android 上捕获异常。
在另一个来源我读到我应该使用Log.e()
而不是e.printStackTrace()
:
... catch (Exception e) {
Log.e(TAG, "Foo did not work", e);
}
我是否必须在发布版本中手动删除这些调用?在 Android 中跟踪异常日志的最佳做法是什么?
我在这里读到不e.printStackTrace()
应该用于在 android 上捕获异常。
在另一个来源我读到我应该使用Log.e()
而不是e.printStackTrace()
:
... catch (Exception e) {
Log.e(TAG, "Foo did not work", e);
}
我是否必须在发布版本中手动删除这些调用?在 Android 中跟踪异常日志的最佳做法是什么?
捕获异常的主要目的当然是处理正在发生的问题,因此,您的捕获部分应始终以某种方式处理错误,例如对不起作用的事物使用默认值,或尝试不同的方法。
无论如何,如果您打算在Google Play 商店中发布您的应用程序,并且如果您想记录异常并将它们用于调试目的,那么为了进一步改进应用程序,您可以使用Google Analytics API部分来处理异常。它还提供了收集堆栈跟踪的工具。(这是来自 API 页面的示例)
// Using StandardExceptionParser to get an Exception description.
try {
// Request some scores from the network.
ArrayList<Integer> highScores = getHighScoresFromCloud();
} catch (IOException e) {
// Get tracker.
Tracker t = ((AnalyticsSampleApp) getActivity().getApplication()).getTracker(
TrackerName.APP_TRACKER);
t.send(new HitBuilders.ExceptionBuilder()
.setDescription(
new StandardExceptionParser(this, null)
.getDescription(Thread.currentThread().getName(), e))
.setFatal(false)
.build()
);
... // Display alert to user that high scores are currently unavailable.
}
之后,所有跟踪的 stracktraces 将在您的应用程序的点击中显示在 Google Developer Console 中。
您还可以添加一个侦听器来捕获未处理的异常。因此,每当发生您没想到的异常时,都会调用 whis 处理程序。
Thread.setDefaultUncaughtExceptionHandler(new MyReportHelper());
当然,您应该始终尝试捕获并处理您知道的所有异常,此处理程序仅用于紧急情况。有关处理程序外观的更多详细信息,请参见此处。