我知道这个问题是有点老了,但对于未来的参考和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