1.4 MIDlet程序结构
要编写能运行在手机上的Java MIDlet,程序必须要继承javax.microedition.midlet.MIDlet类。javax.microedition.midlet.MIDlet类中定义了3个抽象的方法,如下:
(1)startApp(),该方法表明MIDlet正在从暂停状态向激活状态转换,此时,MIDlet通常会初始化激活MIDlet时需要的所有对象,并且设置当前的屏幕。
(2)pauseApp(),当MIDlet从激活状态向暂停状态转换时,该方法将被调用。这意味着该方法会暂停当前激活的全部线程,同时可以选择地设置MIDlet再次被激活时将显示的屏幕。如果需要,可以在该方法中永久保存数据,以便在MIDlet重新激活时获取数据。
(3)destroyApp(),该方法表明MIDlet方法正在被转换成终止状态,它被释放或关闭MIDlet在生命周期获得的全部资源。另外,可以在该方法中完成永久保存数据的工作。
以上3个方法负责处理MIDlet的生命周期,所有编写的MIDlet必须实现这3个方法,因此一个Java MIDlet的程序外壳至少如下:
import javax.microedition.midlet.*; public class HelloMIDlet extends MIDlet { public HelloMIDlet() { } public void startApp() { } public void pauseApp() { } public void destroyApp(Boolean unconditional) { } }
当MIDlet成功初始化之后,就开始了它的生命周期,它的生命周期完全由程序管理器(Java Application Manager,JAM)控制。也就是说,当MIDlet要从一个状态变成另一个状态时,MIDlet会调用相应的函数,如果状态转换时发生错误,那么JAM会抛出MIDletStateChangeException异常。
只有当JAM认为MIDlet的状态必须改变时,才会调用相关的函数,这些函数调用成功之后,JAM才会改变MIDlet的状态。因此,如果MIDlet自己调用这些函数,并不会发生错误,但是也不会造成状态的转换,只是一个单纯的函数调用而已。
另外,startApp()很可能不只是被调用一次,而是每次从停止状态重新回到运行状态时都会被JAM调用,所以只需要被初始化一次的变量就不适合在startApp()之中做初始化,请改用构造函数做初始化操作。
其实,MIDlet自己本身也可以控制自己的状态,但是,不是自己改变自己的状态,而是先自己调用上述相对应的状态改变函数,然后发出信息通知JAM,让它来改变MIDlet的状态。
★ 注意 ★
一旦MIDlet被JAM载入之后,首先会调用MIDlet中没有参数的构造函数以进行初始化工作,如果你没有在程序中加入任何的构造函数,编译器会自动帮你加入一个默认的构造函数;但是如果你编写了自己的带参数的构造函数,则一定要加上一个没有参数的构造函数,否则MIDlet无法正确地初始化。