分享
 
 
 

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

王朝java/jsp·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

前面搞明白了怎样利用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()的情况。

当我们暂停时 看看控制台 ,果然已经打印出"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:trueExecution 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的执行情况和生命周期 也有了大概的了解。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有