Android无法杀死应用程序。应用程序重启

时间:2015-05-29 10:09:27

标签: android

我使用在Application类中定义的自定义异常处理程序:

  Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler()
        {
            @Override
            public void uncaughtException(Thread thread, Throwable ex)
            {
                StringWriter stackTrace = new StringWriter();
                ex.printStackTrace(new PrintWriter(stackTrace));
                StringBuilder errorReport = new StringBuilder();
                errorReport.append("************ CAUSE OF ERROR ************\n\n");
                errorReport.append(stackTrace.toString());

                errorReport.append("\n************ DEVICE INFORMATION ***********\n");
                errorReport.append("Brand: ");
                errorReport.append(Build.BRAND);
                errorReport.append(LINE_SEPARATOR);
                errorReport.append("Device: ");
                errorReport.append(Build.DEVICE);
                errorReport.append(LINE_SEPARATOR);
                errorReport.append("Model: ");
                errorReport.append(Build.MODEL);
                errorReport.append(LINE_SEPARATOR);

                File root = android.os.Environment.getExternalStorageDirectory();
                String currentDateTimeString = DateFormat.getDateTimeInstance().format(new Date());

                File dir = new File(root.getAbsolutePath() + "/.helper/crashes/");
                if (!dir.exists()) {
                    dir.mkdirs();
                }

                File file = new File(dir, "log.txt");

                try {
                    BufferedWriter buf = new BufferedWriter(new FileWriter(file, true));
                    buf.append(currentDateTimeString + ":" + errorReport.toString());
                    buf.newLine();
                    buf.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                android.os.Process.killProcess(android.os.Process.myPid());
                Runtime.getRuntime().exit(1);
            }
        });

在MainActivity中的OnCreate中,我模拟异常:

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
    setContentView(R.layout.activity_root);
    throw new NullPointerException("Example");
}  

应用程序被杀死但立即重启。这种情况发生在无限。我做错了什么?

3 个答案:

答案 0 :(得分:0)

我认为Android OS会解释它是活动中的崩溃。操作系统将自动重新创建活动。

在您的情况下,这是主要活动。

答案 1 :(得分:0)

这只是正常行为而你没有做错任何事。

您可以为清单中的活动设置android:finishOnTaskLaunch="true",以防止它重新启动(未经过测试,但可以在此处找到详细信息:http://developer.android.com/guide/topics/manifest/activity-element.html#finish)。

如果您查看Wildroid发布的答案,您还可以了解有关应用意外关闭时的情况:What happens when App crashes?

答案 2 :(得分:0)

在我的情况下,我只是交换行:

android.os.Process.killProcess(android.os.Process.myPid());
Runtime.getRuntime().exit(1);

Runtime.getRuntime().exit(1);
android.os.Process.killProcess(android.os.Process.myPid());