所讨论的应用程序已经部署。我已经了解了ACRA,并将添加它以找出应用程序崩溃发生的原因。
然而,我的问题是,应用程序将崩溃(对话框将显示给你选项"强制关闭"或"等待"),但不是重新启动应用程序完全,它从崩溃发生之前的点恢复。然而,这会导致一些问题,这些问题只能通过重新启动应用程序来修复。数据的突然丢失,毫无意义的崩溃等等)。
那么我怎样才能迫使我的应用程序在崩溃后结束呢?(不重启)。
编辑:最大的问题是,在应用程序崩溃后,所有的数据在我的首选项文件消失,直到应用程序重新启动时,它回来了。Android默认会重新启动最后一个激活的activity。与其强迫它重新启动,更好的策略是修复您的应用程序,这样即使没有可用的数据,活动也不会崩溃或优雅地退出。如果你完全依赖于一些数据(intent extras),并且没有默认值,你可以在finish()
不可用的时候调用它,或者启动main/parent活动。
另一种方法是拥有自己的默认异常处理程序,在使用ACRA报告崩溃后重新启动主活动等(我相信在ACRA的bug跟踪器中有此功能请求)。
我知道这个问题有点老了,但为了将来的参考和谷歌人,这里有一个完整的答案,从另一个很难找到,stackoverflow问题:Android应用程序在崩溃时重新启动/强制关闭
创建一个用于处理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