设为首页 收藏本站
查看: 1660|回复: 0

[经验分享] 从KVM角度对MIDlet生命周期的剖析

[复制链接]

尚未签到

发表于 2015-4-10 12:12:56 | 显示全部楼层 |阅读模式
  当MIDlet被MIDletSuite载入器载入之后,便开始了它的生命周期.整个生命周期完全由MIDletSuite管理器进行处理.一个MIDlet有3中状态:
  1.停止状态(Paused)
  2.激活状态(Active)
  3.销毁状态(Destroyed)
  当MIDlet刚由载入器载入时处于停止状态,由MIDletSuite管理器将其变成激活状态,然后会调用MIDlet的startApp()方法开始MIDlet的执行.下图是MIDlet的3个状态的转换过程图:
DSC0000.jpg

  由上图可以看出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的产生过程如下图所示:
  
DSC0001.jpg


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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-55660-1-1.html 上篇帖子: kvm 下篇帖子: Kvm-Kmod目录结构与编译依赖(转)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表