Search

Android - UncaughtException 很抱歉, app 已停止的錯誤處理

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