2015-11-18
6:00 PM
有時在實機測試會遇到 很抱歉,XXX已停止的錯誤並跳開應用程式
這種情況只靠 Log4J 是抓不到錯誤訊息的
因此 Debug 就非常困難 沒有錯誤訊息根本不知道哪裡有問題
那麼要如何取得相關的錯誤訊息呢?
由於是未處理的 Exception (稱作 UncaughtException)
因此會直接拋到 UI Thread 然後報錯 應用程式就停止了
要處理這類 UncaughtException 只要在 Application 加入以下程式碼即可
程式碼範例
public class App extends MultiDexApplication {
// 建立 Logger 將以此輸出錯誤訊息
private final Logger logger = Logger.getLogger(App.class);
// 建立 UncaughtExceptionHandler UI Thread 的錯誤訊息會拋給這個物件處理
private Thread.UncaughtExceptionHandler androidDefaultUEH;
private Thread.UncaughtExceptionHandler handler = new Thread.UncaughtExceptionHandler() {
public void uncaughtException(Thread thread, Throwable ex) {
// print 錯誤訊息
logger.error("Uncaught exception is:", ex);
// 回報給預設錯誤處理
androidDefaultUEH.uncaughtException(thread, ex);
}
};
@Override
public void onCreate() {
super.onCreate();
// 初始化 Log4J
ConfigureLog4J.configure();
// 建立 Handler 並指定為預設處理 Handler
androidDefaultUEH = Thread.getDefaultUncaughtExceptionHandler();
Thread.setDefaultUncaughtExceptionHandler(handler);
}
}
各項資料連結
Android Handling the Unexpected
Android Developers - Thread.UncaughtExceptionHandler
No comments:
Post a Comment