在需要長時間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-
發佈留言