我有一個處理程序(線程),我發佈Runnables。如果Runnable錯誤地引發RuntimeException,則整個應用程序進程崩潰。作爲默認聽起來合理,但我想趕上這樣的運行時異常,記錄一個錯誤,並繼續運行。不過,我很難完成這項工作。我認爲以下選項:在運行時異常的情況下避免崩潰處理程序線程?
- 子類
Looper
並重寫loop()
其中包含調用發佈的Runnable的run()
方法的代碼。這是因爲Looper
是最終的。 - 子類
HandlerThread
並覆蓋調用Looper.loop()
的運行方法。如果發生運行時異常,請再次調用super.run()
等等。這是行不通的,因爲「每個線程只能創建一個Looper」。 - 在每個可運行類中,包含運行時異常的try-catch。這會起作用,但相當煩人,因爲我有很多不同的Runnable類。另外,如果可誤運行忘記包含try-catch,則不會保護處理程序線程。
在完美的世界裏,Looper會有一個名爲registerExceptionHandler(ExceptionHandler)
的成員方法,然後在異常情況下調用ExceptionHandler
。
任何人都有更好的建議?
把可運行的代碼在try-catch塊,並捕獲異常。所以runnable不會拋出異常。您可以根據需要管理catch塊中的異常。 – guptakvgaurav
對,我認爲這就是我所說的選項3,我認爲這是一種解決方法。問題是我有幾個Runnable類,並希望避免將這些代碼添加到它們中的每一箇中。 – TommyTh