每当我启动应用程序时,我想知道应用程序是否从崩溃中恢复过来。我可以将它存放在旗帜中吗?
崩溃和常规应用程序退出方案是否在android中执行相同的步骤(生命周期)?
答案 0 :(得分:1)
您可以使用Thread.setDefaultUncaughtExceptionHandler覆盖崩溃异常。但不要忘记,如果您不关闭您的应用程序,它将通过操作系统冻结屏幕 示例代码:
//variable that inside the application class
private Thread.UncaughtExceptionHandler defaultUEH;
public void onCreate(){
super.onCreate();
defaultUEH = Thread.getDefaultUncaughtExceptionHandler();
Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler(){
@Override
public void uncaughtException(Thread t, Throwable e) {
handleUncaughtException(t,e);
defaultUEH.uncaughtException(thread,e);
}
});
}
private void handleUncaughtException(Thread thread,Throwable e){
//do whatever you like!
}
注意:无法了解您的程序是如何打开的
答案 1 :(得分:0)
您根本无法从Android SDK获取此信息。您可以尝试两种方法,首先是对应用程序生命周期进行广泛的日志记录/跟踪。在您的所有活动中,记录您的活动何时开始,恢复,暂停,停止和销毁。 (还处理旋转设备时的特殊用途,活动将会拆除并重新启动)。从这里,您将获得有关活动何时停止的信息,并检查onCreate,onStart或onResume活动中的最后一个状态,以确保您预期命中生命周期。如果没有,那么你很可能经历了崩溃。另请注意,在较旧版本的Android上,某些拆解生命周期回调并不能保证被调用。
第二个选项是尝试使用Thread.setDefaultUncaughtExceptionHandler。我从来没有亲自使用它,但它可能有助于在未使用的异常发生的用例中。您可以记录此类事件并检查该标志一次,该应用程序将恢复。我不确定使用这种机制的所有副作用,例如,这会覆盖默认的未捕获异常行为并删除打印出来的默认堆栈跟踪,这将是非常非常糟糕
答案 2 :(得分:0)
应用程序无法知道它是从崩溃开始的;这与启动后第一次启动应用程序无法区分。在这两种情况下,您都会看到onCreate lifecycle event用于您的活动。
如果您的应用程序崩溃,它将停止处理生命周期事件。所以不,生命周期事件不会以相同的方式处理。
如果您想知道您的应用程序是否崩溃,或许更好的方法是直接记录应用程序崩溃的时间。当应用程序在普通用户上运行时,有Errbit等工具可以帮助记录这一点。设备。
答案 3 :(得分:-1)
尝试将异常处理添加到导致崩溃的任何代码中。
try{
//code causing the crash
} catch (Exception e){
//code to set flags whenever an event causing crash occurs.
}