midlet生命周期

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public class midpLiftcycle extends MIDlet
{
   Display display;
   Form form;

   public midpLiftcycle()
   {
      display=Display.getDisplay(this);
      form=new Form("程序生命周期");
      form.append("第一次先运行构造函数初始设定值");
   }

   public void startApp()
   {
       //display.setCurrent(form); //放在前后效果都一样
       form.append("第二次运行startApp区域程序代码");
       pauseApp(); //若和destroyApp(false)交换顺序,结果不同
       destroyApp(false);  
       display.setCurrent(form);
   }

   public void pauseApp()
   {
      form.append("第三次运行pauseApp区域程序代码");
   }

   public void destroyApp(boolean unconditional)
   {
      form.append("第四次运行destroyApp离开MIDlet程序");
   }
}

运行结果是:

第一次先运行构造函数初始设定值

第二次运行startApp区域程序代码

第三次运行pauseApp区域程序代码

第四次运行destroyApp离开MIDlet程序

看来运行程序时先执行构造函数里的代码,然后执行startApp()里的代码。

 二:执行destroyApp()并不意味着程序结束。

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public class midpLiftcycle extends MIDlet implements CommandListener
{
   Display display;
   Form form;
   Command pauseCommand;
   Command exitCommand;

   public midpLiftcycle()
   {
      display=Display.getDisplay(this);
      form=new Form("程序生命周期");
      pauseCommand = new Command("暂停", Command.ITEM, 2);
      exitCommand = new Command("离开", Command.EXIT, 1);
      form.append("第一次先运行构造函数初始设定值");
      form.addCommand(pauseCommand);
      form.addCommand(exitCommand);
      form.setCommandListener(this);
   }

   public void startApp()
   {
   form.append("第二次运行startApp区域程序代码");
   display.setCurrent(form);        
   }

   public void pauseApp()
   {
      form.append("第三次运行pauseApp区域程序代码");
   }

   public void destroyApp(boolean unconditional)
   {
      form.append("第四次运行destroyApp离开MIDlet程序");//去掉此句相当于该函数无执行体,但仍不影响其它函数的执行。
   }

   public void commandAction(Command cmd, Displayable disp)
   {
      if (cmd == pauseCommand)
      {
         pauseApp();
      }
      else if (cmd == exitCommand)
   {
         destroyApp(false);
      }
   }
}

按完“离开”键之后,再按“暂停”,仍然显示“第三次运行pauseApp区域程序代码”。不是想象中的再按“暂停”就不管用了。若想如此,就可以修改一下上面的程序。

   boolean isPause;
   boolean isOver;

public void startApp()
   {
      if(!isPause)
        form.append("第二次运行startApp区域程序代码");
      else if(isOver)
        destroyApp(false);
      else
        pauseApp();
 
      display.setCurrent(form);        
   }

public void commandAction(Command cmd, Displayable disp)
   {
      if (cmd == pauseCommand)
      {
         isPause=true;
         startApp();
      }
      else if (cmd == exitCommand){
         isOver=true;
         destroyApp(false);
      }
   }

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页