| J2ME中的事件处理 |
|
|
|
|
Author: 一滴蔚蓝色 | Date: 2008-01-13 | View: 936
|
开发技术 -
程序设计
| ||||
|
译者:Rocks 译者按:下面翻译自MIDP2.0 API文档,希望有助于大家理解MIDlet的运行机制。用户的交互产生事件,然后MIDP实现把这些事件采用对应的回调方法来通知应用程序。有四大类UI回调方法: * 抽象的命令,这是高层界面API的一部分 * 单个按键按下和释放的底层事件(如果触摸点设备可用的话,那么还包括触摸点事件) * 回调Canvas类的paint()方法 * 由Display类的callSerially()方法引发的,对Runnable.run()方法的回调 所 有的UI回调方法都是序列化的,所以它们绝不会并行发生。也就是,任何MIDP实现都不能在前一个回调未返回的情况下调用另外一个回调。这个性质确保了当 一个事件发出的时候,它的前一个事件肯定已经处理完成。如果有多个未处理的UI回调,那么只要前一个UI回调返回了,下一个就会紧接着被调用。MIDP实 现同时也要保证,使用callSerially()方法引发的run()方法要在所有未处理的repaint请求都得到满足之后才被调用。 但 在回调的序列规则中有一个特例,就是当Canvas.serviceRepaint()方法被调用的时候。这个方法导致Canvas.paint()方法 被立即调用,并会等待直到该方法运行结束。即使serviceRepaint的调用者本身就在一个回调中也一样。以后会对这个问题进一步讨论。 下面这些回调方法都是序列化执行的: Canvas.hideNotify Canvas.keyPressed Canvas.keyRepeated Canvas.keyReleased Canvas.paint Canvas.pointerDragged Canvas.pointerPressed Canvas.pointerReleased Canvas.showNotify Canvas.sizeChanged CommandListener.commandAction CustomItem.getMinContentHeight CustomItem.getMinContentWidth CustomItem.getPrefContentHeight CustomItem.getPrefContentWidth CustomItem.hideNotify CustomItem.keyPressed CustomItem.keyRepeated CustomItem.keyReleased CustomItem.paint CustomItem.pointerDragged CustomItem.pointerPressed CustomItem.pointerReleased CustomItem.showNotify CustomItem.sizeChanged CustomItem.traverse CustomItem.traverseOut Displayable.sizeChanged ItemCommandListener.commandAction ItemStateListener.itemStateChanged 由Display.callSerially引发的Runnable.run 记 住定时器(Timer)事件并非UI事件,定时器的回调方法是可以和UI事件回调方法同时调用的,不过同一个Timer对象中的多个TimerTask则 是序列化调用的。如果应用程序使用了定时器,那么当定时器事件回调和UI事件回调同时发生时,应用程序必须自己确保其数据结构的安全。应用程序也可以选择 使用Display.callSerially()方法来把定时器事件序列化到UI事件队列中去以避免同步问题。 本文关键字: J2ME 事件 处理 阅读数: 937 | 打印 | E-mail
|
||||||||
| 最近更新 ( 2008-01-13 ) | ||||||||
| (J2ME游戏程序开发实例精讲详解) < 上一篇 | 下一篇 > (J2ME键盘响应祥解及处理方法) |
|---|