4

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

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) 执行时实际发生了什么?

谢谢!

4

4 回答 4

9

你可以做一件事:

不要使用System.exit(0); 相反,您可以按如下方式使用finish( ):

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

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

于 2012-02-07T07:22:45.097 回答
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. 退出应用程序不受欢迎吗?
  2. http://android-developers.blogspot.in/2010/04/multitasking-android-way.html
于 2013-07-25T08:03:44.510 回答
1

阅读文档:

http://developer.android.com/reference/java/lang/System.html#exit(int )

于 2012-02-07T07:47:25.300 回答
0

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

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

于 2015-05-13T14:16:24.180 回答