猛禽洛的程式筆記庫

當Android App出現預期外錯誤時,自動重啟App

在需要長時間24/7運行的場景中,不能容許APP停止運作,但是總會有不完善的程式碼造成意料外的錯誤,輕則能繼續運行,嚴重則閃退。

這邊主要是要解決閃退的情況,因為閃退後APP就掰了,於是需要復活他,使用DefaultUncaughtExceptionHandler來捕獲異常狀態,並重啟APP自身。

//設定全域異常處理,未處理的異常事件都會到這邊來
Thread.setDefaultUncaughtExceptionHandler { thread, throwable ->
  //記錄錯誤
  throwable.printStackTrace()
  
  //發生異常時,以乾淨模式重啟軟體
  val intent = Intent(applicationContext, GatewayActivity::class.java)
  intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK)
  startActivity(intent)

  //殺死目前的程序
  Process.killProcess(Process.myPid())
  exitProcess(0)
}

使用一個新的執行緒(Thread)來設定一個全域的異常處理器,捕獲異常後就重啟首頁,然後殺死之前的自己!

這樣當APP發生閃退等預期外的錯誤時,也能夠復活自己繼續執行下去。

-END-

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *