3  MIDlet的生命周期
 

3  MIDlet的生命周期

       使用J2ME技术来开发手机程序,按照功能可以分为各个子技术,其中每个技术都对应一个API中提供的包,其中java.langjava.utiljava.io包是对于J2SE API的简化,在功能上和J2SE保持一致,这里就不介绍了,J2ME技术新增的各个技术依次如下所示:

u       javax.microedition.midlet——MIDlet生命周期

u       javax.microedition.lcdui——界面编程技术

u       javax.microedition.rms——持久存储技术

u       javax.microedition.io——网络编程技术

MIDP2.0中新增的技术如下所示:

u       javax.microedition.lcdui.game——一个简单的游戏引擎

u       javax.microedition.media——声音编程技术

u       javax.microedition.media.control——声音控制技术

       其他每个可选包(Option Package)都包含一个独立的技术实现。由于参加本次学习的学员都具备一定的语言基础,所以在以后的说明中假设大家可以熟练使用Java语言的语法,熟悉Java语言文档的查阅和使用方法。

下面先介绍一下MIDlet的生命周期技术。

3.1 MIDlet概述

       JavaAppletServlet技术类似,每个J2ME技术的手机程序也是一个MIDlet,在实际的手机程序中,至少需要包含一个继承自MIDlet的类,而且J2ME程序在执行时第一个运行的类必须是MIDlet的子类。

       所以在J2ME程序开发过程中,MIDlet类的作用显得就十分重要。该类属于J2ME API中的javax.microedition.midlet包。

       所以J2ME的手机程序也可以叫做MIDlet程序。

3.2  MIDlet生命周期

       为了更加方便的进行MIDlet程序的开发,在设计J2ME手机程序执行时,人为的规定了MIDlet的生命周期。

       所谓生命周期,就是指程序从开始执行到从退出的生命过程,例如一般的J2SE程序的生命周期就是从main方法开发,当main方法结束而且没有线程运行时则程序结束。由于J2ME手机程序在执行过程中,需要为手机环境的系统事件预留出处理的接口,所以使MIDlet的生命周期显得比较复杂。

       MIDlet的生命周期主要包含三个状态:

u       暂停状态——程序处于后台运行状态,例如手机来电时,J2ME程序会被强制切换到该状态。

u       运行状态——程序处于正常执行状态

u       销毁状态——程序进入退出前的处理,该状态结束则程序退出。

       MIDletAPI参看J2WTK文档中的javax.microedition.midlet包,生命周期中主要包含以下三个方法:

u       startApp——当程序由暂停状态进入到运行状态前,手机系统会自动调用该方法。

u       pauseApp——当程序由运行状态进入暂停状态前,手机系统会自动调用该方法。

u       destroyApp——当程序异常退出,或者是按手机键盘挂机键退出时,手机系统会自动该方法。

整个MIDlet程序的执行流程如下:

       1、系统调用继承自MIDlet类的构造方法,创建对象。

       2、系统进入MIDlet生命周期的暂停状态,这个是MIDlet生命周期的第一个状态。

       3、系统调用startApp方法,然后进入MIDlet的运行状态,程序正常执行。

       4、如果在在暂停状态或者运行状态下发生错误,则程序会调用destroyApp方法,然后进入销毁状态。

       对于生命周期的整个过程,可以通过如下程序来进行实际的测试,在测试的过程中,把程序的输出显示在开发工具的控制台。(说明:在真实的手机中不存在控制台的概念,所以无法显示这些内容)

       程序的源代码参看LifeCircleMIDlet.java

       J2WTK2.2的模拟器中,可以使用模拟器菜单中的“暂停”和“恢复”菜单,模拟手机中暂停处理,然后可以看到整个生命周期的执行过程。

       MIDlet类中,也可以强制进入生命周期中的某个状态,MIDlet类中提供了两个方法实现状态的切换,当调用以下方法时,系统直接使用程序进入到特定的状态,而不调用startApppauseAppdestroyApp方法,这两个方法依次为:

u       notifyPaused()——使程序进入到暂停状态

u       notifyDestroyed——使程序进入到销毁状态,即程序退出

              以上就是MIDlet的生命周期的概念,在实际的开发中,利用生命周期的概念可以控制程序的程序,也可以很方便的实现和手机系统的交互。

3.3 MIDlet类的其他功能

       除了生命周期相关的操作以外,MIDlet类中还提供了其他一些系统级的操作,例如:

u       getAppProperty——读取jad文件中属性的设置。说明:jad文件是J2ME程序发布时的描述文件,在其中可以存储一些常用的属性信息。

u       platformRequest(String URL)——平台请求方法,该方法需要MIDP2.0,例如可以实现如下两个系统功能:

l                拨打电话实现:

              platformRequest(“tel:1860”);

l         打开指定网页

              platformRequest(“http://www.test.com”);