비정상 종료 및 예외 - Android SDK v2 (레거시)

이 문서에서는 Android v2용 Google 애널리틱스 SDK를 사용하여 비정상 종료 및 예외 측정을 개략적으로 설명합니다.

개요

비정상 종료 및 예외 측정을 사용하면 앱에서 발생하는 비정상 종료 및 포착되지 않은 비정상 종료와 예외의 수와 유형을 측정할 수 있습니다. Google 애널리틱스의 예외는 다음과 같습니다.

  • String (선택사항) 설명: 예외에 관한 설명입니다 (영문 기준 최대 100자). null이 허용됩니다.
  • boolean isFatal – 예외가 치명적인지 여부를 나타냅니다. true는 치명적임을 나타냅니다.

비정상 종료 및 예외 데이터는 주로 비정상 종료 및 예외 보고서에서 확인할 수 있습니다.

포착된 예외

포착된 예외는 앱에서 예외 처리 코드를 정의한 오류입니다. 이는 일반적으로 앱을 정상적으로 사용하는 동안 발생할 것으로 예상되는 오류이며 앱에서 복구할 수 있도록 하려는 오류입니다(예: 데이터 요청 중 가끔 네트워크 연결 시간 초과).

예외 처리 코드의 catch 블록에 sendException()를 추가하여 포착된 예외를 측정할 수 있습니다.

다음 예에서는 앱이 클라우드에서 최고 점수 목록을 로드하려고 합니다. 네트워크 연결 속도가 느려서 요청 시간이 초과되면 Google에서는 사용자를 위해 예외를 처리하기 전에 Google 애널리틱스로 예외를 전송합니다.

try {
  ArrayList highScores = getHighScores();            // Get scores from the cloud.
} catch (IOException e) {
  Tracker myTracker = EasyTracker.getTracker();      // Get a reference to tracker.
  myTracker.sendException(e.getMessage(), false);    // false indicates non-fatal exception.

  ... // Display alert to user that high scores are currently unavailable.
}

포착되지 않은 예외 측정

포착되지 않은 예외는 런타임에 앱에 예상치 못한 조건이 발생하여 치명적인 경우가 많아 결과적으로 앱이 비정상 종료되는 경우를 나타냅니다. 포착되지 않은 예외는 EasyTracker 또는 ExceptionReporter 클래스를 사용하여 Google 애널리틱스로 자동으로 전송될 수 있습니다.

EasyTracker 사용

EasyTracker를 사용하여 앱에서 포착되지 않은 모든 예외를 자동으로 전송하려면 analytics.xml 파일에 다음 줄을 추가합니다.

<bool name="ga_reportUncaughtExceptions">true</bool>

자동 예외 측정을 사용하여 예외를 전송한 후 EasyTracker는 Thread의 기본 예외 핸들러에 예외를 전달합니다.

자동 예외 측정을 사용할 때는 다음 사항에 유의하세요.

  • 자동 예외 측정을 사용하여 전송된 모든 예외는 Google 애널리틱스에서 심각한 것으로 보고됩니다.
  • 설명 필드는 스택 트레이스를 사용하여 자동으로 채워집니다.

ExceptionReporter 사용

EasyTracker를 사용하지 않는 경우 ExceptionReporter 클래스를 사용하여 포착되지 않은 자동 예외 측정을 구현합니다. 이는 EasyTracker가 자동 예외 보고를 처리하기 위해 구현하는 것과 동일한 클래스입니다.

ExceptionReporter는 특정 스레드 또는 앱의 모든 스레드에 대해 기본 포착되지 않은 예외 핸들러 역할을 할 수 있습니다. Google 애널리틱스로 예외를 전송한 후 ExceptionReporter 클래스는 선택적으로 예외를 개발자가 제공하는 포착되지 않은 예외 핸들러에 전달할 수 있습니다.

다음 코드는 새로운 ExceptionReporter 객체를 만들어 이를 새로운 기본 포착되지 않은 예외 핸들러로 설정합니다. 따라서 포착되지 않은 모든 예외는 Google 애널리틱스로 전송된 다음 포착되지 않은 이전의 예외 핸들러로 전달됩니다. 대부분의 애플리케이션에서는 기본 핸들러가 예외를 로그에 기록하고 애플리케이션을 종료합니다.

UncaughtExceptionHandler myHandler = new ExceptionReporter(
    myTracker,                                        // Currently used Tracker.
    GAServiceManager.getInstance(),                   // GAServiceManager singleton.
    Thread.getDefaultUncaughtExceptionHandler());     // Current default uncaught exception handler.

 // Make myHandler the new default uncaught exception handler.
Thread.setDefaultUncaughtExceptionHandler(myHandler);

ExceptionParser 사용

SDK는 Google 애널리틱스로 포착되지 않은 예외를 전송할 때 스택 트레이스에서 가장 관련성 높은 설명을 가져오기 위해 구현할 수 있는 ExceptionParser 인터페이스를 제공합니다. ExceptionParser 인터페이스에는 getDescription(String threadName, Throwable t)라는 메서드가 하나 있습니다.

다음 예와 같이 setExceptionParser(ExceptionParser parser)를 호출하여 포착되지 않은 예외를 Google 애널리틱스로 전송할 때 ExceptionParser를 사용하도록 Tracker를 설정할 수 있습니다.

// Where myParser represents your implementation of ExceptionParser.
ExceptionParser parser = new myParser(context);

// Where myTracker is an instance of Tracker.
myTracker.setExceptionParser(parser);

그러면 추적기가 파서의 getDescription() 메서드를 사용하여 Google 애널리틱스로 전송된 포착되지 않은 예외의 설명 필드를 채웁니다.