许多Java ME教程使用startApp()方法创建和初始化对象,构造函数留空。但是,当MIDlet从暂停状态恢复时,也会调用startApp()方法。这会导致重新初始化所有对象,并且所做的任何更改都将丢失。
我还注意到netbeans IDE在其自动生成的代码中,在startApp()中使用了许多 if(object == null)语句来检查对象是否是之前创建的。 / p>
在构造函数本身中简单地完成所有对象创建和初始化是否没有意义?有没有理由不这样做?
答案 0 :(得分:3)
这部分是为了理解MIDP线程模型。
调用MIDlet构造函数的线程取决于谁在手机上开发了Java虚拟机。
开发人员倾向于只依赖于MIDP规范在该领域所说的内容,这就是startApp,pauseApp和lcdui事件处理应该如何表现。
然而,只有少数情况下这很重要。
此问题的第二个方面是软件开发人员试图在MIDlet暂停时尽可能多地释放资源(内存,文件句柄,套接字......)。
同样,有些情况下MIDlet应该暂停一些资源,即使暂停了,但是在编写这种行为时,你真的需要考虑你正在做什么(并且比随便更好地理解它)。
值得记住的是,有些手机始终保持JVM进程运行。当他们还有一个不支持类卸载的JVM时(正如J2ME世界中常见的那样),这意味着即使在完全销毁MIDlet之后,静态变量也可以保留在内存中。