在本文中,分析了MIDLET中各方法(destroyApp()、pauseApp()、startApp()、构造方法)的调用情况,
经程序测试发现:
构造方法在程序启动时首先调用,而且构造方法仅在程序启动时调用一次,
接着是调用
startAp
p(),
startApp()调用完后,仍可能会被再次调用,如在使程序进入暂停状态调用
pauseApp()后,再重新启动程序时,
startApp()会再次重新调用。
经过测试还发现,如果一个状态下(如:开始状态)的方法没有执行完成,就不能正常进行其它状态。如在下面程序中的情况,在
startApp()中加入一个死循环的计数。即使是选择了暂停选项,手机界面上表面会呈现暂停,实际上仍在断续运行,在下面的测试程序中,当按下暂停后计数表面停止,实际上当再次激活时,计数马上跳到一个很大的数(正常计数情况下的数)。
destroyApp()方法在程序结束后调用。但如上面情况所说,如果上一状态(
startApp()
、
pauseApp())的程序没有运行结束,
destroyApp()方法也不能在按下退出按键后正常调用。
测试程序:
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Form; import javax.microedition.midlet.MIDlet; import javax.microedition.midlet.MIDletStateChangeException;
public class Helloword extends MIDlet {
private Display display; private Form form; private int i; public Helloword() { System.out.println("调用构造方法"); display=Display.getDisplay(this); form=new Form("第一个J2ME测试程序"); display.setCurrent(form); i=0; } protected void destroyApp(boolean arg0) throws MIDletStateChangeException { System.out.println("程序销毁..."); System.gc();//内存回收 } protected void pauseApp() { System.out.println("程序暂停..."); } protected void startApp() throws MIDletStateChangeException { System.out.println("调用startApp()方法"); while(true){ form.append("计数:/n"+i); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } form.deleteAll(); i++; } } } |