java - 为什么要避免 System.exit()?

标签 java blackberry java-me

我在 Anthony Rizk 的书 Beginning BlackBerry Development 中读到,虽然 System.exit() 方法会退出应用程序,但建议避免这种情况,并在退出时通过关闭所有应用程序来正确清理应用程序屏幕代替。我的问题是,为什么要避免 System.exit()

最佳答案

这是一个非常有趣的问题!

Java SE API 和 BB Java API 的 System.exit() 行为不同:

  • 在 Java SE API 中:终止当前正在运行的 Java 虚拟机
  • 在 BB Java API 中:终止当前正在运行的 Java 应用程序

另请查看 Carol Hamer 和 Andrew Davison 在“学习黑莓游戏开发”中对此的说法:

Caution: The BlackBerry platform doesn’t launch your application in a separate virtual machine, which means that you have to be very careful about cleanup. The remains of an earlier run (such as static variables and other data still in memory) can potentially affect later runs of the application. It also means that there’s a global namespace, so if two classes have the same name, errors can arise.

所以,是的,每个 BB 设备只有一个 JVM。是的,在 BB 应用程序中,System.exit() 调用只会停止您的应用程序,将所有静态数据留在 RAM 中,除非您进行初步清理

因此您不应避免使用 System.exit() - 这是关闭 BB 应用程序的合法/正确方法,但只需在此调用之前进行任何清理

更新:

糟糕。我创建了一个测试应用程序(使用 JDE 4.7.0 + Storm 9530 4.7.0 模拟器)来测试 System.exit() 调用后静态内容是否真的保留在 RAM 中。事实证明它不再呆在那里了。下次我进入应用程序时,静态变量为空值(正如我们期望它们在 Java SE 中一样)。因此,我不清楚 Carol Hamer 和 Andrew Davison 所说的 “早期运行的残余(例如静态变量和仍在内存中的其他数据)可能会影响应用程序的后续运行” 是什么意思。

关于java - 为什么要避免 System.exit()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8304531/

相关文章:

java - 未知故障(cmd :Failure calling service package: Broken pipe (32))

deployment - 黑莓应用程序的企业分发

canvas - J2ME Canvas 上的倒计时器

multithreading - 工作线程无法更新 Motorola V3 上的 UI

serialization - Java ME 对象持久化

java - 如何确保每个 ejb-client 都有一个 ejb-impl(在耳朵里)?

java - 使用 ojdbc6 驱动程序通过 jdbc 连接到 Oracle 8i 数据库时出错

java - 使用 HashMap 还是不使用 HashMap?

BlackBerry Webworks 签名失败

blackberry - 从另一个 MainScreen 打开一个 MainScreen