在我的Android應用程序中,我嘗試將Try Catch
塊放在所有可能的位置。不過,我想避免由於任何未處理的錯誤而導致應用程序崩潰。我怎樣才能做到這一點?Android:避免由於未處理的錯誤導致應用程序崩潰
我已經使用Thread.setDefaultUncaughtExceptionHandler(handler);
但這隻會幫助我獲得崩潰數據的權利?
在我的Android應用程序中,我嘗試將Try Catch
塊放在所有可能的位置。不過,我想避免由於任何未處理的錯誤而導致應用程序崩潰。我怎樣才能做到這一點?Android:避免由於未處理的錯誤導致應用程序崩潰
我已經使用Thread.setDefaultUncaughtExceptionHandler(handler);
但這隻會幫助我獲得崩潰數據的權利?
你爲什麼要這樣做?
如果有些地方可以捕捉到異常並執行一些有意義的操作,例如顯示有用的警告,然後繼續以一致且可用的狀態運行應用程序,那麼很好。
如果你不能採取任何有意義的行動,那麼就讓失敗發生。例如,有很多方法可以通知您產生的故障,因此您可以修復它們:例如,查看ACRA。或者,Android開發人員控制檯現在會報告您的市場分銷應用程序的失敗。
我建議你閱讀有關ACRA here
所有的錯誤和異常是Throwable延伸。通過捕獲Throwable,可以處理所有意外情況。但捕捉錯誤將會產生結果。你只可以在catch塊做未便之前應用程序崩潰
您可以使用以下方法:
public class MyApplication extends Application
{
public void onCreate()
{
// Setup handler for uncaught exceptions.
Thread.setDefaultUncaughtExceptionHandler (new Thread.UncaughtExceptionHandler()
{
@Override
public void uncaughtException (Thread thread, Throwable e)
{
handleUncaughtException (thread, e);
}
});
}
// here you can handle all unexpected crashes
public void handleUncaughtException (Thread thread, Throwable e)
{
e.printStackTrace(); // not all Android versions will print the stack trace automatically
Intent intent = new Intent();
intent.setAction ("com.mydomain.SEND_LOG"); // see step 5.
intent.setFlags (Intent.FLAG_ACTIVITY_NEW_TASK); // required when starting from Application
startActivity (intent);
System.exit(1); // kill off the crashed app
}
}
將處理您的應用程序意外崩潰,這取自that answer。
「你爲什麼要這樣做」不是一個答案。 – 2013-04-14 04:52:31
@Glenn,「你爲什麼要這麼做?」是完全有效的迴應。答案不一定是問題的直接答案。它可以是「你不應該這樣做,你有沒有試過考慮這個?」 (請參閱SO FAQ)。在這種情況下,吞嚥所有例外情況是相當糟糕的做法。捕捉所有內容並允許你的應用程序「陷入困境」並不是一個好主意,因爲它會碰到任何不一致的狀態。最好處理具體的情況,你可以向用戶提供有意義的反饋或採取有意義的行動出錯。 – 2013-08-20 14:33:17
這是一個迴應。這不是一個答案。 – 2013-08-20 16:06:34