當機和例外狀況 - Android SDK v2 (舊版)

本文件概要說明使用 Android 適用的 Google Analytics (分析) SDK v2 如何評估當機和例外狀況。

總覽

您可以透過當機和例外狀況評估,評估應用程式偵測到/未偵測到的當機和未擷取到當機情形和例外狀況數量。Google Analytics (分析) 的例外狀況包含:

  • String (選填) 說明:例外狀況的說明 (最多 100 個半形字元)。 接受 null
  • boolean isFatal – 表示例外狀況是否嚴重。true 表示嚴重。

系統主要會在「當機和例外狀況」報表中提供當機和例外狀況資料。

偵測到例外狀況

「捕捉到例外狀況」是指您定義了例外狀況處理程式碼的錯誤,這些通常是您預期在正常使用應用程式期間會發生的錯誤,也是您希望應用程式復原的錯誤,例如在要求資料要求期間,網路連線有時會逾時。

您可以在例外狀況處理程式碼的 catch 區塊中加入 sendException(),以測量擷取的例外狀況。

在以下範例中,應用程式嘗試從雲端載入最高分清單。如果要求逾時 (可能是因為網路連線速度緩慢),我們會將例外狀況傳送至 Google Analytics (分析),然後再為使用者處理:

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 Analytics (分析)。

使用 EasyTracker

如要使用 EasyTracker 自動傳送應用程式中的所有未偵測到的例外狀況,請在 analytics.xml 檔案中新增以下這一行:

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

使用自動例外狀況評估功能傳送例外狀況後,EasyTracker 會將例外狀況傳送至 Thread 的預設例外狀況處理常式。

使用自動例外狀況評估時,請注意下列事項:

  • 凡是使用自動例外狀況評估功能傳送的例外狀況,Google Analytics (分析) 都會將其回報為嚴重錯誤。
  • 系統會透過堆疊追蹤自動填入說明欄位。

使用 ExceptionReporter

如果您並未使用 EasyTracker,請透過 ExceptionReporter 類別實作自動擷取的例外狀況評估。這與 EasyTracker 實作的類別,用於處理其自動例外狀況回報。

ExceptionReporter 可做為特定執行緒或應用程式中所有執行緒的預設未偵測到的例外狀況處理常式。將例外狀況傳送至 Google Analytics (分析) 後,ExceptionReporter 類別可選擇將例外狀況傳遞給您提供的未偵測到的例外狀況處理常式。

下列程式碼會建立新的 ExceptionReporter 物件,並將其設為新的預設未偵測到的例外狀況處理常式。因此,每個未偵測到的例外狀況都會傳送至 Google Analytics (分析),然後再傳送至先前未偵測到的例外狀況處理常式。對於大多數應用程式,預設處理常式會將例外狀況記錄至記錄並終止應用程式。

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 提供 ExceptionParser 介面,您可以實作這個介面,在將未擷取的例外狀況傳送至 Google Analytics (分析) 時,從堆疊追蹤中取得最相關的說明。ExceptionParser 介麵包含一種方法:getDescription(String threadName, Throwable t)

您可以呼叫 setExceptionParser(ExceptionParser parser),將 Tracker 設為在傳送未偵測到的例外狀況至 Google Analytics (分析) 時使用 ExceptionParser,如以下範例所示:

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

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

接著,您的追蹤器會使用剖析器的 getDescription() 方法,在傳送給 Google Analytics (分析) 的所有未擷取例外狀況中填入說明欄位。