从KVM角度对MIDlet生命周期的剖析

当MIDlet被MIDletSuite载入器载入之后,便开始了它的生命周期.整个生命周期完全由MIDletSuite管理器进行处理.一个MIDlet有3中状态:

      
1.停止状态(Paused)

       2.激活状态(Active)

       3.销毁状态(Destroyed)

      
当MIDlet刚由载入器载入时处于停止状态,由MIDletSuite管理器将其变成激活状态,然后会调用MIDlet的startApp()方法开始MIDlet的执行.下图是MIDlet的3个状态的转换过程图:

从KVM角度对MIDlet生命周期的剖析

       
由上图可以看出MDIlet创建实例之后首先是Paused状态,然后转换成Active状态,并且Active状态和Paused状态可以多次相互转
换.因此,在Active状态时(startApp)不应该处理那些在整个MIDlet周期中只可以初始化一次的资源.

       
对应与MIDlet的3个状态,MDIlet有3个方法:

       
1.startApp()方法:
AMS会调用startApp方法来获取该MIDlet所需要的资源,然后会将MIDlet的状态改变成Active状态.

        2.pauseApp()方法:
AMS在调用该方法后,会释放MIDlet所占用的所有资源.如果此时MIDlet创建了对象,则会对对象进行转存储,并且停止当前所有的活动JAVA线程.

       
3.destroyApp()方法:
ASM调用该方法会释放MIDlet占用的任何资源,然后将管理权交给AMS或者直接退出KVM.

       
下面以MIDlet的启动过程为例,从KVM的角度来分析MIDlet如何创建并且运行的.

        当虚拟机启动之后通过Class.forName方法最先执行的是MIDletSuite载入器,该类完成MIDletSuite执行前所需要资源的初始化工作:

       
1.初始化Security Token

       
2. 初始化MIDletSuite存储类

       
3. 初始化MIDletProxyList

       
4.初始化MIDlet事件监听器

       
5.通过MIDletSuite存储类提供的方法获取JAR包中的主类,生成MIDlet对象.

       
6.调用MIDletSuite管理器开始执行MIDlet并且管理其生命周期.

        
MIDletStateHandler类充当了整个MIDlet的管理器功能,负责状态的管理和调度.MIDletSuite类完成初始化功能之后,调用MIDletStateHandler类邪恶startSuite方法启动MIDlet执行:

       
1.首先startSuite方法会向MIDlet运行队列中注册新的MIDlet

        
2.startSuite方法循环中从MIDlet运行队列中取出优先级最高的MIDlet进行处理.如果当前只有一个MIDlet,则会将其取出,并且
将其状态转换成ACTIVE,然后会调用MIDlet的startApp方法.如果此时用户点击了按钮时间,并且调用了pauseApp()方法,则
startSuite循环中会依据当前MIDlet的状态将其转换成paused状态.同样如果用户激发了destroyApp()方法并且MIDlet
执行队列中没有其他MIDlet可执行,则会回收当前MIDlet所占用的资源,并且退出startSuite中的循环.如果此时MIDlet执行队列中
还有其他MIDlet需要执行,则会在销毁当前MIDlet之后继续调度下一个优先级最高的MIDlet执行.

       
整个MDIlet的产生过程如下图所示:


从KVM角度对MIDlet生命周期的剖析

     
整个MIDlet的执行过程还涉及到事件处理过程和窗口UI的处理过程,这两个过程相对比较复杂,在以后的文章中再进行详细的描述.

~~~~~~ End ~~~~~~

作者: 姜江

BLOG: http://blog.csdn.net/jznsmail

E-Mail: [email protected]

QQ: 457283

欢迎关注我的微信公众号:

 

如无特殊说明,文章均为本站原创,转载请注明出处!

发表评论

邮箱地址不会被公开。 必填项已用*标注