动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
电脑书籍下载:程序设计书籍 | 数据库教程书籍 | 平面与多媒体书籍 | 网络通讯书籍 | 系统管理书籍 | 网络安全书籍 | 认证考试书籍
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Java教程 ]的信息



本月文章推荐
.21天学通J2EE1.
.经典:从追MM谈Java的23种设计模.
.有人看过2001 的书吗?.
.邮件例程.
.参加4月4日Ben Wang的JBoss讲座纪.
.java中文件长度的转换.
.[webservices]XFire Web服务的单.
.XML 和 Java:一个强大的组合.
.位运算符.
.JAVA技术专题综述之构造方法篇.
.使用jdom的XPath来快速定位xml节.
.Javascript实例教程(20) OLE Aut.
.Java Unicode转义字符的小小研究.
.Java 技巧:用 Java 实现回调例程.
.用Java实现Web服务器 HTTP协议.
.缺点:丢失的违例.
.Webwork 和 spring 的整合.
.到2004年Java技术发展预测.
.Java 相关的编译技术.
.Java的final变量需要注意地方.

J2ME学习--了解MIDlet的生命周期(图)

发表日期:2008-1-5 |



  前面搞明白了怎样利用eclipse编写基本的MIDlet。对MIDlet的基本结构也有所了解。但 MIDlet 具体是怎样运行的?三个状态间又是怎样的转换的?这些疑问需要自己一点一点的去解开……
  
  以前面的HelloMidlet 程序为例,这次为了清楚程序的执行情况,加了几句println。具体代码如下:
  
  import Javax.microedition.midlet.MIDlet;import javax.microedition.midlet.MIDletStateChangeException;import javax.microedition.lcdui.*;/* * 创建日期 2005-10-5 * * TODO 要更改此生成的文件的模板,请转至 * 窗口 - 首选项 - Java - 代码样式 - 代码模板 *//** * @author Snail * * TODO 要更改此生成的类型注释的模板,请转至 * 窗口 - 首选项 - Java - 代码样式 - 代码模板 */public class HelloMidlet extends MIDlet {   private Display display;   private Form form; /** *  */ public HelloMidlet() { // TODO 自动生成构造函数存根 System.out.println("ConstrUCtor"); display = Display.getDisplay(this); } /* (非 Javadoc) * @see javax.microedition.midlet.MIDlet#startApp() */ protected void startApp() throws MIDletStateChangeException { // TODO 自动生成方法存根 System.out.println("startApp called"); form = new Form("HelloMidlet"); form.append("Welcome to J2ME world!"); display.setCurrent(form); } /* (非 Javadoc) * @see javax.microedition.midlet.MIDlet#pauseApp() */ protected void pauseApp() { // TODO 自动生成方法存根 System.out.println("pauseApp called"); form = new Form(""); } /* (非 Javadoc) * @see javax.microedition.midlet.MIDlet#destroyApp(boolean) */ protected void destroyApp(boolean arg0) throws MIDletStateChangeException { // TODO 自动生成方法存根 System.out.println("destroyApp called:" + arg0); }}
  
  仔细观察代码,我只是在构造方法体和三个方法内分别添加了标志。方便我们在运行的时候 了解程序具体的执行情况。运行程序,当模拟器出现欢迎界面时,仔细观察eclipse的控制台。我们看到 如下信息:
  
  正在通过存储根 DefaultColorPhone 来运行
  
  ConstructorstartApp called
  
  系统首先调用构造方法,构造完成后MIDlet是处于暂停状态,紧接着会很快的转换到活动状态,然后才调用startApp 方法。 现在的Midlet 已经处于活动状态。但是应用程序治理器会因为某些情况要求程序暂停 ,比如手机忽然来电 或者短消息 等。应用程序治理器为了节省更多的系统资源 ,会首先调用pauseApp方法释放一部分Midlet非必须的资源,然后再转换到暂停状态。所以一般在pauseApp()方法内应该添加释放资源的必需代码。上面的pauseApp()方法内
  
  form = new Form("");
  
  可以模拟将form所占的内存释放掉。WTK 模拟器可以模拟系统调用pauseApp()的情况。
  
J2ME学习--了解MIDlet的生命周期(图)

  当我们暂停时 看看控制台 ,果然已经打印出"pauseApp called" 。当处理完外部事件,我们返回Midlet 时 系统将Midlet暂停状态再次转换到活动状态,接着再调用startApp 方法恢复Midlet 所需要的资源。程序中startApp()方法内
  
  form = new Form("HelloMidlet");form.append("Welcome to J2ME world!");
  
  可以重新将form的内容恢复。
  
  看看控制台 再次打印出 "startApp called"。
  
  我们看到startApp()方法在一个Midlet中可能会多次调用。所以我们应该注重:Midlet的初始化过程和主要执行过程 并不是要全部写在startApp()方法体内。那些只执行一次 并且在程序初始化时执行的初始化动作 ,应该放在构造方法内。仔细观察控制台信息,还应该注重的是,构造方法只是在最初初始化时被系统调用,而且只有无参的构造方法才能被系统自动调用。假如把form的初始化工作放在构造方法内进行,当Midlet从暂停状态恢复到活动状态,重新调用startApp()方法时,form的内容就无法恢复了。
  
  当我们强制关闭模拟器终止Midlet时,控制台打印出如下信息:
  
  destroyApp called:true   Execution completed.
  
  此时 控制台打印的 是 true ,即传入 destroyApp(boolean arg0)的参数为true。这表示 系统无条件终止该程序,并释放一切占用的资源。假如为false ,Midlet可以通过抛出一个MIDletStateChangeException 异常来向系统发出请求 。此时就有可能使Midlet 继续保持其当前状态。
  
  另外Midlet本身也可以主动要求状态转换。以活动状态-->暂停状态为例。Midlet必须调用notifyPaused()方法通知应用程序治理器 :我要暂停运行,然后由应用程序治理器根据情况对Midlet做相应的转变。假如Midlet只是调用pauseApp()方法,系统只会执行其中的代码 ,并不会进行状态转换。但是当Midlet调用notifyPaused()时 pauseApp()并不会被调用。最好是在调用notifyPaused()之前先调用pauseApp()。同样手动关闭Midlet时也一样 ,应该在调用notifyDestroyed()方法之前先调用destroyApp()方法。这些情况都是非强制性的,所以在请求 转换到销毁状态时传入的参数 最好是 false。
  
  现在看来,状态转换需要调用的startApp()  pauseApp() destroyApp() 方法具体工作也只是提供初始化资源 、释放资源的地方。
  
  到此为止,对Midlet的执行情况和生命周期 也有了大概的了解。
上一篇:用 Kerberos 为 J2ME 应用程序上锁(1) 人气:332
下一篇:J2me技术——跟我学制作Pak文件 人气:461
浏览全部Java的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-7-24 Sablog-X v2.0 预览版
2008-7-24 帝国备份王EmpireBak 2008 正式版
2008-7-24 网趣网上购物系统时尚版 v8.2
2008-7-24 纵横B2B电子商务系统XYECS!B2B v
2008-7-24 e路小说小偷 v1.2.0723
2008-7-24 凌风美女图片站程序 v2.2
2008-7-24 TOM15电影收索程序
2008-7-24 清风信息自动采集生成系统 v1.0
2008-7-24 QQ邮箱编辑器 v1.0 (小小菜刀ASP
2008-7-19 UltraEdit 简体中文增强版 14.10
2008-7-19 CentOS 5.2 i386 LiveCD
2008-7-19 Snapture多功能相机 v1.4
2008-7-19 iAcces中文输入法 v1.0Build016
2008-7-19 Cookbook烹饪秘籍 v2.5
2008-7-19 苹果专用DVD转换工具 v1.1.59汉化
2008-7-19 Modem修复软件ZiPhone修改版04.0
2008-7-19 AgileMessenger即时通讯工具美化
2008-7-19 Sketches画图软件 v0.7b6破解版


  发表评论
姓 名: 验证码:
内 容:
[ 汉字翻译拼音 ] [ 广告代码 ] [ 符号对照表 ] [ 进制转换 ] [ 经典小工具 ] [ 个税计算 ] [ 汉字简繁转换 ] [ 普通单位换算 ] [ 公制单位换算 ]
[ 生辰老黄历 ] [ 国内电话区号 ] [ 国家代码与域名缩写 ] [ 文字加密解密 ] [ 健康查询 ] [ 万年历 ] [ 手机号码查询 ] [ ip搜索 ] [ Google PR查询 ]
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号