分享
 
 
 

MIDlet生命周期的理解及游戏死机问题

王朝other·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

学习J2ME,首先要了解MIDlet的生命周期。本文主要是深入了解一下MIDlet的生命周期。

首先在你运行一个程序的时候,JAM会调用该midlet的构造函数来生成midlet的对象,然后被JAM置于Paused状态。一旦JAM认为这个midlet对象可以执行时,就会调用startApp()方法,并将此midlet置于Active状态。startApp()方法由于在系统来电、或者退回到系统菜单返回时会被再次调用,所以这里只可以放初始化一次的代码。或者你把初始化一次的代码放到midlet的构造函数中。例如:

public class Midlet extends MIDlet{

Display display = null;

MyCanvas can;

public Midelt(){

display = Display.getDisplay(this);

can = new MyCanvas();

}

public void startApp(){

display.setCurrent(can);//如果把can = new

MyCanvas()放到这里,再来电返回时就会出问题。

}

}

或者

public class Midlet extends MIDlet{

Display display = null;

MyCanvas can;

public Midelt(){

}

public void startApp(){

if(display ==null){

display = Display.getDisplay(this);

can = new MyCanvas();

}//此处只会被运行1次,这样就不会出错

display.setCurrent(can);//这句按理放到这里最合适,你想显示那个canvas就放哪个!

}

}

在startApp()中,你调用display.setCurrent(can)的时候,首先运行的是showNotify(),接着运行paint()函数一次,如果有线程的话,此时run()方法开始运行。一般在run()方法里一般这么写。此时的run()是可以处理异步事件的,也就是你来电话的时候,这里run()还是运行的。不过他不会paint()什么东西,即使它里面有repaint(),这点放心。

public void run(){

while(flag){//flag是boolean型变量

try{

Thread.sleep(50);//时间自己设啦。

}catch(Exception e){}

repaint();

}

}

哇,来电话了,或者你退到系统菜单。如NOKIA s60的手机。

hideNotify()首先会被调用,接着pauseApp()再被调用。

这么快,打完了,返回时:先调用showNotify(),接着调用paint()函数一次,最后才是调用startApp()函数。

关于run()和paint()也可以使用display.callSerially(this)语句。这个以后有时间了再说。

明白了生命周期,再来看死机问题。我说的死机问题,多是来电话返回时死机。其实只要找到了问题,一切就变的很简单。

为什么死机,归根结底还是程序问题。

Graphics mg;//定义的全局参数

paint(Graphics g){

mg = g;//有的程序这样写,if(mg ==null){mg =g:}这样对于n7610系列就会出错。

mg.drawString();

switch(case){

case GAME_MUNE:

drawA();

break;

case PLAY:

drawB();

break;

default:

break;

}

}

/*下面的画图函数一定要放到paint()函数里调用,不要在别的地方调用,如run()里面,上面说过,程序暂停之后返回,会先paint()一次,如果在别的地方调用就会出现问题。

*/

public void drawA(){

mg.drawString();

}

public void drawB(){

mg.drawString();

}

按照上面的写法一般不会出现死机问题。当然,你也可以不定义全局的mg,可以把g单独传到各个画图子函数中。如,

paint(Graphics g){

g.drawString();

switch(case){

case GAME_MUNE:

drawA(g);

break;

case PLAY:

drawB(g);

break;

default:

break;

}

}

public void drawA(Graphics mg){

mg.drawString();

}

public void drawB(Graphics mg){

mg.drawString();

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
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- 王朝網路 版權所有