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)语句。这个以后有时间了再说。 |
MIDlet的生命周期的深入理解及游戏死机问题
最新推荐文章于 2024-09-29 23:31:00 发布