Android 应用程序崩溃,但未重新启动 - 从应用程序中的另一个点恢复



所讨论的应用程序已经部署。我已经了解了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

之前,您必须至少逐个尝试处理所有异常。

相关内容

  • 没有找到相关文章

最新更新