3

Androidで例外をキャッチするために使用すべきではないhereを読みました。e.printStackTrace()

Log.e()別のソースで、代わりに使用する必要があることを読みましたe.printStackTrace()

... catch (Exception e) {
 Log.e(TAG, "Foo did not work", e);
}

リリース ビルドでこれらの呼び出しを手動で削除する必要がありますか? Android で例外ログをトレースするベスト プラクティスは何ですか?

4

1 に答える 1

2

例外をキャッチする主な目的は、もちろん、発生した問題を処理することです。このため、キャッチ部分は常に何らかの方法でエラーを処理する必要があります。たとえば、機能しなかったものに対してデフォルト値を使用するか、別のことを試します。

とにかく、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.
}

その後、追跡されたすべての stracktrace がアプリのタップで Google Developer Console に表示されます。

Google 開発者コンソールでのクラッシュと ANR' (ウェブから取得した画像)

未処理の例外をキャッチするリスナーを追加することもできます。したがって、予想外の例外が発生した場合はいつでも、whis ハンドラーが呼び出されます。

Thread.setDefaultUncaughtExceptionHandler(new MyReportHelper());

もちろん、知っているすべての例外を常にキャッチして処理するようにしてください。このハンドラーは緊急時のみに使用されます。ハンドラーがどのように見えるかの詳細については、こちらを参照してください。

于 2015-09-29T09:25:58.977 に答える