许多Java ME教程都使用startApp()方法创建和初始化对象,而构造函数为空白。但是,当MIDlet从暂停状态恢复时,也会调用startApp()方法。这将导致所有对象被重新初始化,所做的任何更改都将丢失。

我还注意到,netbeans IDE在其自动生成的代码中,在startApp()中使用了许多if(object == null)语句来检查对象是否早先创建。

简单地在构造函数本身中完成所有对象的创建和初始化是否有意义?有什么理由不这样做吗?

最佳答案

这部分是关于了解MIDP线程模型的。

调用MIDlet构造函数的线程取决于谁在电话上开发了Java虚拟机。

开发人员倾向于仅依赖MIDP规范在该区域中所说的内容,即startApp,pauseApp和lcdui事件处理的行为。

但是,只有少数情况很重要。

此问题的第二个方面是软件开发人员试图在MIDlet暂停时释放尽可能多的资源(内存,文件句柄,套接字...)。

同样,在某些情况下,即使暂停了MIDlet,MIDlet仍应卡在某些资源上,但是在编码这种行为时,您确实需要考虑自己在做什么(比起临时来更好地理解它)。

还值得记住的是,某些电话始终保持JVM进程运行。当它们还具有不支持类卸载的JVM(在J2ME世界中很常见)时,这意味着即使MIDlet已被完全销毁,静态变量也可以保留在内存中。

关于java-me - 为什么在Java ME应用程序中使用startApp()代替构造函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2364156/

10-13 09:39