我知道這個問題是有點老了,但對於未來的參考和Google,這裏是從另一個完整的答案,很難找到,計算器問題:Android App Restarts upon Crash/force close
創建用於處理unCaughtException
類
public class MyExceptionHandler implements
java.lang.Thread.UncaughtExceptionHandler {
private final Context myContext;
private final Class<?> myActivityClass;
public MyExceptionHandler(Context context, Class<?> c) {
myContext = context;
myActivityClass = c;
}
public void uncaughtException(Thread thread, Throwable exception) {
StringWriter stackTrace = new StringWriter();
exception.printStackTrace(new PrintWriter(stackTrace));
System.err.println(stackTrace);// You can use LogCat too
Intent intent = new Intent(myContext, myActivityClass);
String s = stackTrace.toString();
//you can use this String to know what caused the exception and in which Activity
intent.putExtra("uncaughtException",
"Exception is: " + stackTrace.toString());
intent.putExtra("stacktrace", s);
myContext.startActivity(intent);
//for restarting the Activity
Process.killProcess(Process.myPid());
System.exit(0);
}
}
然後在每一個線程(通常你只有一個,除非你開始一個新的線程(異步或...着,當然你知道線程,如果你能做出新的;)),設置這個類作爲DefaultUncaughtExceptionHandler
Thread.setDefaultUncaughtExceptionHandler(new MyExceptionHandler(this,
YourCurrentActivity.class));
但請記住! 在開發應用程序的最後一步中,您必須至少嘗試處理所有例外情況,然後再將它們留給DefaultUncaughtExceptionHandler
我相信您在這裏面對的是'ANR'或活動不是響應,這與應用程序崩潰(強制關閉)不同。應用程序中的某些操作似乎阻止主線程(UI線程)一段時間,這會提示此強制關閉/等待對話框。如果您選擇等待,則該應用程序在該操作完成的範圍內將保持無響應狀態。然後,該應用程序將恢復。但是,一旦你按下「強制關閉」,應用程序將關閉,並在下次訪問時重新啓動。 – Abhijit
這不是ANR的情況,有時會顯示「強制關閉」或「等待」,這是UI線程被阻塞,但有時它只是一個「強制關閉」,所以應用程序實際上已經崩潰。應用程序不會一直關閉 - 在某些平臺上它會關閉,但在其他平臺上,它只是從以前的點開始恢復,並且已經丟失了所有的優先數據。 – digerati32