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