ITPub博客

首页 > Linux操作系统 > Linux操作系统 > MIDlet的lifecycle(转)

MIDlet的lifecycle(转)

原创 Linux操作系统 作者:jcszjswkzhou 时间:2019-05-02 17:12:07 0 删除 编辑

我们已经成功编译并运行了一个简单的MIDlet程序。现在,让我们来分析一下MIDlet的结构,了解一下它的Lifecycle。

通过对源程序的观察,我们可以发现MIDlet程序的运行是由startApp(),pauseApp()和destroyApp()这3个方法控制的。它们在javax.microedition.midlet
.MIDlet中定义。所有的MIDlet都必须有这3个方法。

顾名思义startApp()方法用于标志一个MIDlet的开始执行。不过这里要注意一点,与HelloWorld程序的constrctor不同。startApp()不光是在初始化完一个MIDlet时执行,只要该MIDLet被从Paused态激活(变为Active态),startApp()就会被调用。

pauseApp()方法标志着MIDlet进入Pause态。而destroyApp()方法标志着MIDlet进入destroyed态。(注意:这里严格的讲应该说成:方法被调用并成功返回标志着...)

看完上面的描述,大家可能会满头雾水,又是方法,又是状态的,什么跟什么吗?这还得从MIDlet的执行机制讲起。

MIDlet的执行是通过Application Management software来管理的。这玩意儿是处在操作系统级别上来管理MIDlet运行的底层机制的总称,所谓MIDlet state(MIDlet状态)就是它一手操办,控制管理的。MIDlet state确保了AMS随时可以消灭该MIDlet,同时MIDlet也有办法进入一个Pause态,并可再次激活。

MIDlet State 分为Paused,Active,destroyed三种。当AMS创生一个新的MIDlet实体时,对应于MIDlet,表现为其constructor被调用,进入Paused状态。当所有的准备工作都做好后,AMS判断现在MIDlet可以运行了,于是调MIDlet.startApp()方法。进入Active态。当AMS决定要把MIDlet转入Paused态,就会调用MIDlet.pauseApp()方法,MIDlet就会暂停执行,通常Paused态会用于释放所占资源。当AMS判断MIDlet不再需要,就会调用MIDlet.destroyApp(),MIDlet被消灭。

请注意我上述是站在AMS的角度在谈AMS如何控制MIDlet的状态改变。程序员也可请求MIDlet的状态的变换,通过调用resumeRequest, notifyPaused, notifyDestroyed这三个方法。

我们的HelloWorld程序先把destroyApp()的unconditional值置为false,抛出一个MIDletStateChangeException 异常,表示MIDlet这时还不想被destroy。notityDestroyed()通知AMSMIDlet进入destroyed态。具体的细节请参阅MIDP API文档。

下面给出一个MIDlet的最简单的状态流程:

//FlowMIDlet.java MIDlet的最简单的状态流程

import javax.microedition.midlet.*;

public class FlowMIDlet extends MIDlet {
public void startApp() {
System.out.println( "In startApp..." );
pauseApp();
}
public void pauseApp() {
System.out.println( "In pauseApp..." );
destroyApp( true );
}
public void destroyApp( boolean unconditional) {
System.out.println( "In destroyApp..." );
}
}

MIDlet的状态的改变可以用下图表示:

这里还要说几句闲话,关于AMS,其作用不止是控制MIDlet的运行状态。它实际上际上负责了MIDlet的整个运行机制。关于AMS进一步的描述,请参见王森老师的文章-“利用Java撰写手机应用-Java Application Manager篇”(《程序员》,12期,2001)。注意其中JAM就是AMS。

好了,J2ME(CLDC/MIDP)的简介就算是结束了。把帖子转成html实在是一项很累的工作。试过这后我才明白这个道理。如果您看过之后,有那么一点帮助的话,那就算是对我最大的报偿了。如果您觉得文章有什么错漏之处,或是有什么感想,欢迎给我E-mail


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10294527/viewspace-127037/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2007-08-29

  • 博文量
    3488
  • 访问量
    2602051