首页 | 注册 | 登陆
首页 >> 技术专栏 >> java文章 >> java基础 

深入了解MIDP-基础篇⑶


作者java 来源java 加入时间:2006年02月21日
摘要:
深入了解MIDP-基础篇⑶
>作者:Ding  

Email:[email protected]

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

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

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

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


转载:转载请保留本信息,本文来自
http://www.51dibs.com
/html/2006/article/info3/a_3aefa32cd163e60f.htm




深入了解MIDP-基础篇⑶


站点:爱心种子小博士 关键字:深入了解MIDP-基础篇⑶




深入了解MIDP-基础篇⑶
>作者:Ding  

Email:[email protected]

本文主要介绍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。


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




发布人:love
→ 推荐给我的好友 → 报告错误链接
上篇文章:MySQL数据库技术(12)
下篇文章:设计模式之Singleton(单态)
〖文章打印〗
〖关闭窗口〗
发表评论
查看评论
中“深入了解MIDP-基础篇⑶”相关内容 中“深入了解MIDP-基础篇⑶”相关内容
中“深入了解MIDP-基础篇⑶”相关内容 中“深入了解MIDP-基础篇⑶”相关内容
中“深入了解MIDP-基础篇⑶”相关内容 中“深入了解MIDP-基础篇⑶”相关内容

关于我们网站留言友情链接与我在线与我聊天领取红包管理TOP