如何知道上一次android应用程序是否崩溃

Sye*_*Ali 5 java crash android crash-reports

我有一个android应用程序,我想在此应用程序启动时知道我的应用程序之前是否崩溃。此崩溃可能是由操作系统在应用程序上为节省内存而强制执行的崩溃或任何其他原因。它可能未在UnhandledExceptionHandler中捕获。我到目前为止已处理的内容在下面给出,它没有缓存与本机os相关和内存强制的情况

UncaughtExceptionHandler handler = new UncaughtExceptionHandler();
Thread.setDefaultUncaughtExceptionHandler(handler);
Run Code Online (Sandbox Code Playgroud)

编辑:

请不要建议第三方图书馆。

Sye*_*Ali 1

我找到了一个 hack 并且它对我有用。如果知道用户是否离开应用程序或关闭系统或执行任何此类操作或应用程序本身关闭,则可以检查其应用程序是否崩溃。如果应用程序本身关闭,则意味着它已崩溃,否则则不会(在用户关闭应用程序或关闭系统等情况下)。

在共享首选项的帮助下,我们可以存储并获取一个变量,该变量将告诉应用程序是否崩溃,代码如下

public class Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    boolean appcrashed=false;
    super.onCreate(savedInstanceState);
    boolean didUserLeft=loadSavedPreferences();
    appcrashed=!didUserLeft;
    if(appcrashed)
        Toast.makeText(this, "App Crashed!", Toast.LENGTH_LONG).show();
    else
        Toast.makeText(this, "App OK!", Toast.LENGTH_LONG).show();
    savePreferences(false);

    UnhandledExceptionHandler handler = new UnhandledExceptionHandler();

    Thread.setDefaultUncaughtExceptionHandler(handler);

}


public boolean loadSavedPreferences() {
    SharedPreferences sharedPreferences = PreferenceManager
            .getDefaultSharedPreferences(this);
    boolean didUserLeft = sharedPreferences.getBoolean("didUserLeft", true);
    return didUserLeft;
}

public void savePreferences(boolean value) {
    SharedPreferences sharedPreferences = PreferenceManager
            .getDefaultSharedPreferences(this);
    Editor editor = sharedPreferences.edit();
    editor.putBoolean("didUserLeft", value);
    editor.commit();
}

@Override
public void onResume(){
    super.onResume();
    savePreferences(false);
}

@Override
public void onDestroy(){
    savePreferences(true);
}

@Override
public void onPause() {
    super.onPause();  // Always call the superclass method first
    savePreferences(true);
    }


@Override
public void onUserLeaveHint(){
    savePreferences(true);
}
Run Code Online (Sandbox Code Playgroud)