应用程序如何知道它是否从崩溃开始

时间:2017-07-07 14:31:52

标签: android android-activity android-lifecycle

每当我启动应用程序时,我想知道应用程序是否从崩溃中恢复过来。我可以将它存放在旗帜中吗?

崩溃和常规应用程序退出方案是否在android中执行相同的步骤(生命周期)?

4 个答案:

答案 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.
}