finish()和System.exit(0)之间的区别

时间:2013-08-17 18:26:27

标签: android activity-finish

我说的是在android中编程。

在早期我认为,finish() 关闭当前活动并返回活动堆栈中的上一个,System.exit(0) 关闭整个应用程序

但我错了。 我做了一个小实验,并了解两者都只完成当前活动


我能注意到的唯一区别是,在Android 2.3.3中

  • ActivityResult 使用onActivityResult()传播回finish()。而onActivityResult()没有被System.exit(0)。{/ li>

但是在Android 4.2.2中,两者都调用了onActivityResult()!对于exit(),Intent为null。 (我只测试了这2个设备)

  • 使用exit()时有一段时间滞后,而finish() 更快。(似乎在exit()中有更多后台操作)

所以,

  1. 两者有什么区别?

  2. 在哪些情况下,我可以使用exit()?

  3. 我相信在这两种方法之间我还缺少一些东西。 希望有人可以解释更多并纠正我。

    由于

    按要求编辑:

    制作包含2项活动的Android应用程序。使用Intent从Launcher活动中调用第二个Activity。现在,在第二个活动中,点击一下按钮,拨打System.exit(0);。 “ VM停止进一步执行,程序将退出。”????(根据documentation

    我看到那里的第一项活动。为什么? (欢迎你证明我错了/我是对的)

4 个答案:

答案 0 :(得分:21)

如果您只有一项活动,实际上没有区别。但是,如果堆栈上有多个活动,则:

  • 完成() - 完成调用它的活动,您会看到上一个活动。
  • System.exit(0) - 重新启动应用,在堆栈上减少一个活动。因此,如果您从ActivityA调用了ActivityB,并且在ActivityB中调用了System.exit(0),那么应用程序将被杀死并立即启动,只有一个活动ActivityA

答案 1 :(得分:13)

根据android Developer -

finish()

  

在您的活动完成后调用此选项并应关闭。该   ActivityResult会传播回通过你发送给你的人   onActivityResult()。

System.exit(0)

  

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

答案 2 :(得分:9)

根据文件,程序将退出 但它似乎是文档中的一个错误。在java程序的情况下,它是正确的。但是进入Android,您将看到堆栈中的上一个活动。

由于Android编码是使用java编码完成的,因此大部分文档都与java相同 来自文档,

System.exit(0)
VM停止进一步执行,程序将退出。

对于Android方面,我们必须将'program'替换为其他内容。可以是活动或上下文。

答案 3 :(得分:2)

在我测试之后,萨卡达的回答是正确的。

完成将关闭此活动并回到流行。

但退出也将关闭当前活动并清空冻结中的所有活动并重新开始上一个活动

  

如果您只有一项活动,实际上没有区别。   但是,如果堆栈上有多个活动,则:

     

finish() - 完成调用它的活动,你看   以前的活动。 System.exit(0) - 用一个重启应用程序   堆栈上的活动减少了。所以,如果你打电话给ActivityB   在ActivityB中调用ActivityA和System.exit(0),然后调用   应用程序将被杀死并立即启动只有一个   活动ActivityA