为什么要避免使用System.exit()?

Ant*_*ony 6 java blackberry java-me

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

Vit*_*nko 6

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

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

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

另请参阅Carol Hamer和Andrew Davison的"学习黑莓游戏开发"中的内容.

警告:BlackBerry平台不会在单独的虚拟机中启动您的应用程序,这意味着您必须非常小心清理.较早运行的剩余部分(例如静态变量和仍在内存中的其他数据)可能会影响应用程序的后续运行.它还意味着有一个全局命名空间,因此如果两个类具有相同的名称,则可能会出现错误.

所以,是的,每个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的意思是"早期运行的遗留物(例如静态变量和其他数据仍在内存中)可能会影响应用程序的后续运行".


fav*_*tti 0

根据我对 BB 开发的记忆,System.exit() 只是关闭应用程序,而不破坏您创建的对象,将它们留给垃圾收集器。因此,该应用程序不会有效地从内存中删除。一一关闭屏幕实际上会释放它们。

我可能不太了解细节,但是网上有足够的关于最佳实践的信息:)