选择显示字体大小

入门-j2me学习日记之midlet的生命周期

    前面搞明白了怎样利用eclipse编写基本的midlet。对midlet的基本结构也有所了解。但 midlet 具体是怎样运行的?三个状态间又是怎样的转换的?这些疑问需要自己一点一点的去解开……

   以前面的hellomidlet 程序为例,这次为了清楚程序的执行情况,加了几句println。具体代码如下:

import javax.microedition.midlet.midlet;
import javax.microedition.midlet.midletstatechangeexception;
import javax.microedition.lcdui.*;
/*
* 创建日期 2005-10-5
*
* todo 要更改此生成的文件的模板,请转至
* 窗口 - 首选项 - java - 代码样式 - 代码模板
*/

/**
* @author snail
*
* todo 要更改此生成的类型注释的模板,请转至
* 窗口 - 首选项 - java - 代码样式 - 代码模板
*/
public class hellomidlet extends midlet {
     private display display;
     private form form;
/**
  *
  */
public hellomidlet() {
  // todo 自动生成构造函数存根
  system.out.println("constructor");
  display = display.getdisplay(this);
}

/* (非 javadoc)
  * @see javax.microedition.midlet.midlet#startapp()
  */
protected void startapp() throws midletstatechangeexception {
  // todo 自动生成方法存根
  system.out.println("startapp called");
  form = new form("hellomidlet");
  form.append("welcome to j2me world!");
  display.setcurrent(form);

}

/* (非 javadoc)
  * @see javax.microedition.midlet.midlet#pauseapp()
  */
protected void pauseapp() {
  // todo 自动生成方法存根
  system.out.println("pauseapp called");
  form = new form("");


}

/* (非 javadoc)
  * @see javax.microedition.midlet.midlet#destroyapp(boolean)
  */
protected void destroyapp(boolean arg0) throws midletstatechangeexception {
  // todo 自动生成方法存根
  system.out.println("destroyapp called:" + arg0);

}

}



    仔细观察代码,我只是在构造方法体和三个方法内分别添加了标志。方便我们在运行的时候 了解程序具体的执行情况。运行程序,当模拟器出现欢迎界面时,仔细观察eclipse的控制台。我们看到 如下信息:

正在通过存储根 defaultcolorphone 来运行

constructor
startapp called


    系统首先调用构造方法,构造完成后midlet是处于暂停状态,紧接着会很快的转换到活动状态,然后才调用startapp 方法。 现在的midlet 已经处于活动状态。但是应用程序管理器会因为某些情况要求程序暂停 ,比如手机突然来电 或者短消息 等。应用程序管理器为了节省更多的系统资源 ,会首先调用pauseapp方法释放一部分midlet非必须的资源,然后再转换到暂停状态。所以一般在pauseapp()方法内应该添加释放资源的必需代码。上面的pauseapp()方法内

form = new form("");


可以模拟将form所占的内存释放掉。wtk 模拟器可以模拟系统调用pauseapp()的情况。



     当我们暂停时 看看控制台 ,果然已经打印出"pauseapp called" 。当处理完外部事件,我们返回midlet 时 系统将midlet暂停状态再次转换到活动状态,接着再调用startapp 方法恢复midlet 所需要的资源。程序中startapp()方法内

form = new form("hellomidlet");
form.append("welcome to j2me world!");


可以重新将form的内容恢复。

看看控制台 再次打印出 "startapp called"。

   我们看到startapp()方法在一个midlet中可能会多次调用。所以我们应该注意:midlet的初始化过程和主要执行过程 并不是要全部写在startapp()方法体内。那些只执行一次 并且在程序初始化时执行的初始化动作 ,应该放在构造方法内。仔细观察控制台信息,还应该注意的是,构造方法只是在最初初始化时被系统调用,而且只有无参的构造方法才能被系统自动调用。如果把form的初始化工作放在构造方法内进行,当midlet从暂停状态恢复到活动状态,重新调用startapp()方法时,form的内容就无法恢复了。

  当我们强制关闭模拟器终止midlet时,控制台打印出如下信息:

    destroyapp called:true
      execution completed.


    此时 控制台打印的 是 true  ,即传入 destroyapp(boolean arg0)的参数为true。这表示 系统无条件终止该程序,并释放一切占用的资源。如果为false ,midlet可以通过抛出一个midletstatechangeexception 异常来向系统发出请求 。此时就有可能使midlet 继续保持其当前状态。

   另外midlet本身也可以主动要求状态转换。以活动状态-->暂停状态为例。midlet必须调用notifypaused()方法通知应用程序管理器 :我要暂停运行,然后由应用程序管理器根据情况对midlet做相应的转变。如果midlet只是调用pauseapp()方法,系统只会执行其中的代码 ,并不会进行状态转换。但是当midlet调用notifypaused()时 pauseapp()并不会被调用。最好是在调用notifypaused()之前先调用pauseapp()。同样手动关闭midlet时也一样 ,应该在调用notifydestroyed()方法之前先调用destroyapp()方法。这些情况都是非强制性的,所以在请求 转换到销毁状态时传入的参数 最好是 false。

   现在看来,状态转换需要调用的startapp()   pauseapp()  destroyapp() 方法具体工作也只是提供初始化资源 、释放资源的地方。

   到此为止,对midlet的执行情况和生命周期 也有了大概的了解。


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons