为什么在Java ME应用程序中使用startApp()而不是构造函数?

时间:2010-03-02 15:16:06

标签: java-me lifecycle

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

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

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

1 个答案:

答案 0 :(得分:3)

这部分是为了理解MIDP线程模型。

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

开发人员倾向于只依赖于MIDP规范在该领域所说的内容,这就是startApp,pauseApp和lcdui事件处理应该如何表现。

然而,只有少数情况下这很重要。

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

同样,有些情况下MIDlet应该暂停一些资源,即使暂停了,但是在编写这种行为时,你真的需要考虑你正在做什么(并且比随便更好地理解它)。

值得记住的是,有些手机始终保持JVM进程运行。当他们还有一个不支持类卸载的JVM时(正如J2ME世界中常见的那样),这意味着即使在完全销毁MIDlet之后,静态变量也可以保留在内存中。