Search

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

2015-11-18 6:00 PM

有時在實機測試會遇到 很抱歉,XXX已停止的錯誤並跳開應用程式

這種情況只靠 Log4J 是抓不到錯誤訊息的

因此 Debug 就非常困難 沒有錯誤訊息根本不知道哪裡有問題

那麼要如何取得相關的錯誤訊息呢?

由於是未處理的 Exception (稱作 UncaughtException)

因此會直接拋到 UI Thread 然後報錯 應用程式就停止了

要處理這類 UncaughtException 只要在 Application 加入以下程式碼即可

程式碼範例
  1.  
  2. public class App extends MultiDexApplication {
  3.  
  4. // 建立 Logger 將以此輸出錯誤訊息
  5. private final Logger logger = Logger.getLogger(App.class);
  6.  
  7. // 建立 UncaughtExceptionHandler UI Thread 的錯誤訊息會拋給這個物件處理
  8. private Thread.UncaughtExceptionHandler androidDefaultUEH;
  9. private Thread.UncaughtExceptionHandler handler = new Thread.UncaughtExceptionHandler() {
  10. public void uncaughtException(Thread thread, Throwable ex) {
  11. // print 錯誤訊息
  12. logger.error("Uncaught exception is:", ex);
  13. // 回報給預設錯誤處理
  14. androidDefaultUEH.uncaughtException(thread, ex);
  15. }
  16. };
  17.  
  18. @Override
  19. public void onCreate() {
  20. super.onCreate();
  21.  
  22. // 初始化 Log4J
  23. ConfigureLog4J.configure();
  24.  
  25. // 建立 Handler 並指定為預設處理 Handler
  26. androidDefaultUEH = Thread.getDefaultUncaughtExceptionHandler();
  27. Thread.setDefaultUncaughtExceptionHandler(handler);
  28. }
  29. }
  30.  
各項資料連結
Android Handling the Unexpected
Android Developers - Thread.UncaughtExceptionHandler

No comments:

Post a Comment