2012-02-07 42 views
4

我有两个不同的活动。第一次启动第二个。当System.exit(0)执行时会发生什么?

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

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

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

是否在这种情况下清理了沙箱?正常退出按'返回键'甚至是android.os.Process.killProcess(android.os.Process.myPid()),沙箱中的文件被保留。 那么,当System.exit(0)执行时究竟发生了什么?

谢谢!

+0

我不使用finish()来代替? – 2012-02-07 07:34:12

回答

9

你可以做一两件事:

DONOT使用System.exit(0);,而不是你可以使用完成()如下:

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

这里的数据不会被loss.HTH :)

+1

我在第二个活动中调用'System.exit(0)'。我知道这不是退出的好方法,但我只想知道如果我这样做会发生什么。 – Kane 2012-02-07 07:42:13

+0

@JinZhang它将终止正常运行的JVM。 – 2012-02-07 07:57:23

+0

这会导致文件丢失? – Kane 2012-02-07 08:09:59

2

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

虚拟机停止进一步执行,程序将退出。

现在,在您的情况下,第一个活动由于活动堆栈而回来。所以当你从一个活动移动到另一个时,使用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
+1

这节省了我的问题。感谢您的分享。 – 2015-03-26 21:14:19

0

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

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

相关问题