深入了解MIDP-基础篇⑶

作者:Ding  

Email:wu_yi_ding@yahoo.com

本文主要介绍MIDP的基本概念。因为注意到国内的java站点介绍J2me的还比较少

,所以就写了本文。如果有什么不妥的地方,欢迎您email我,讨论商榷。

如您要转贴,请保留原出处,并勿做删改。谢谢。

本文是“j2me的基本介绍”系列文章的后续,在基础篇中,将主要介绍MIDP的组织

结构,和MIDlet的LifeCycle,并通过一个实例,编写一个MIDlet程序。

=======================================================================

4.MIDlet的Lifecycle


   在上一节里,我们已经成功编译并运行了一个简单的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,notify

Destroyed这三个方法。

例如,我在上一节给出的例子中有如下程序片段:
...
public void commandAction(Command c,Displayable d){
   if (c ==exitCommand){
       destroyApp(false);
       notifyDestroyed();
}
...

这里先把destroyApp()的unconditional值置为false,抛出一个MIDletStateChange

Exception 异常,表示MIDlet这时还不想被destroy。notityDestroyed()通知AMS

MIDlet进入destroyed态。具体的细节请参阅MIDP API文档。

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

===========================FlowMIDlet.java================================
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..." );
}
}

===========================FlowMIDlet.java完===============================

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

                            destoryApp()
          +----------------------->--------------------------+
          |                                                  |
new() +========+  startApp()  +========+  destroyApp()  +===========+
----->| Paused |------------->| Active |--------------->| Destroyed |
      +========+              +========+                +===========+
          |      pauseApp()      |
          +---------<------------+


图1 MIDlet的状态转变


   这里还要说几句闲话,关于AMS,其作用不止是控制MIDlet的运行状态。它实际上

际上负责了MIDlet的整个运行机制。关于AMS进一步的描述,请参见王森老师的文章-

“利用Java撰写手机应用-Java Application Manager篇”(《程序员》,12期,2001)

。注意其中JAM就是AMS。


===============待续==================

<script type="text/javascript"> </script><script src="深入了解MIDP-基础篇⑶.files/show_ads.js" type="text/javascript"> </script> 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值