MIDlet生命周期的理解及游戏死机问题(2)
哇,来电话了,或者你退到系统菜单。如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();
}[iocblog.net 来源]
文章整理:iocblog
版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。