【问题标题】:What will happen when System.exit(0) execute?System.exit(0) 执行时会发生什么?
【发布时间】:2012-02-07 07:17:38
【问题描述】:

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

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

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

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

在那种情况下是否清理了沙盒?通过'return key'甚至android.os.Process.killProcess(android.os.Process.myPid())正常退出,沙箱中的文件被保留。 那么,System.exit(0) 执行时到底发生了什么?

谢谢!

【问题讨论】:

  • 你不使用 finish() 代替吗?

标签: android kill-process


【解决方案1】:

你可以做一件事:

不要使用 System.exit(0); 而是可以使用 finish() ,如下所示:

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

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

【讨论】:

  • 我在第二个活动中打电话给System.exit(0)。我知道这不是一个好的退出方式,但我只想知道如果我这样做会发生什么。
  • @JinZhang 它将终止当前运行的JVM。
  • 这样会导致文件丢失吗?
  • @jin Zhang 如果任何非持久性意味着任何临时数据都会丢失。但是如果您正在使用文件中的数据并存储它,那么您可以再次读取它。
【解决方案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

【讨论】:

  • 这解决了我的问题。感谢您的分享。
【解决方案3】:
【解决方案4】:

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

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

【讨论】:

    猜你喜欢
    • 2012-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-03
    • 2010-11-28
    • 2017-08-19
    • 2010-10-14
    • 1970-01-01
    相关资源
    最近更新 更多