System.exit(0)执行时会发生什么?

时间:2012-02-07 07:17:38

标签: android kill-process

我有两个不同的活动。第一个发射第二个。

Intent intent = new Intent(this, Activity2.class);
startActivity(intent);

在第二个活动中,我调用System.exit(0)。 我认为第一个活动是由“页面堆栈”引起的。 但我发现发生了两件事。

  1. 正在进行的变体失去了价值。 (我认为进度重新开始)
  2. 在第一个活动中创建的文件,在第二个活动中附加数据并保存,丢失!(从沙箱中删除)。我使用applicationContext.openFileOutput(fileName, Context.MODE_PRIVATE);
  3. 创建的文件

    在那种情况下是否清理过沙箱?通过“返回键”或甚至android.os.Process.killProcess(android.os.Process.myPid())正常退出,保留了沙盒中的文件。 那么,System.exit(0)执行时实际发生了什么?

    谢谢!

4 个答案:

答案 0 :(得分:9)

你可以做一件事:

不要使用 System.exit(0); ,而只需使用完成(),如下所示:

Intent intent = new Intent(this, Activity2.class);
startActivity(intent);
finish();

这里的数据不会丢失.HTH:)

答案 1 :(得分:2)

  

System.exit(0)执行时会发生什么?

VM停止进一步执行,程序将退出。

现在,在您的情况下,第一个活动由于活动堆栈而返回。因此,当您使用Intent从一个活动移动到另一个活动时,请像这样执行当前活动的finish()

Intent intent=new Intent(getApplicationContext(), NextActivity.class);
startActivity(intent);
CurrentActivity.this.finish();

这将保证关闭应用程序时不会运行任何活动。

要退出应用程序,请使用以下代码:

MainActivity.this.finish();          
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(0);
getParent().finish();

如果您的应用程序使用背景中的任何资源,例如音乐播放器播放来自后台的歌曲或任何在后台使用互联网数据的应用程序或依赖于您的应用程序的任何小部件,则不应使用System.exit()

有关更多信息,请参阅以下参考资料:

  1. Is quitting an application frowned upon?
  2. http://android-developers.blogspot.in/2010/04/multitasking-android-way.html

答案 2 :(得分:1)

答案 3 :(得分:0)

  

那么,System.exit(0)执行时实际发生了什么?

android.os.Process.killProcess(android.os.Process.myPid())System.exit(0)是相同的。当您从第二个活动中调用其中任何一个时,应用程序将关闭并仅使用一个活动再次打开(我们假设您有2个活动)。您可以通过将日志记录(Log.i("myTag", "MainActivity started");)放入主要活动的onCreate menthod来检查此行为。