3 MIDlet的生命周期
使用J2ME技术来开发手机程序,按照功能可以分为各个子技术,其中每个技术都对应一个API中提供的包,其中java.lang、java.util、java.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概述
和Java的Applet、Servlet技术类似,每个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 销毁状态——程序进入退出前的处理,该状态结束则程序退出。
MIDlet的API参看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类中提供了两个方法实现状态的切换,当调用以下方法时,系统直接使用程序进入到特定的状态,而不调用startApp、pauseApp、destroyApp方法,这两个方法依次为:
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”);