|
|
当前位置: 化境编程网 >>
J2ME |
|
J2ME中的事件处理 |
[时间: 2006-5-15 1:30:27
作者:
] |
|
来源:
译者:Rocks 译者按:下面翻译自MIDP2.0 API文档,希望有助于大家理解MIDlet的运行机制。
JAVA手机网[www.cnjm.net]
用户的交互产生事件,然后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
JAVA手机网[www.cnjm.net] CustomItem.getPrefContentHeight CustomItem.getPrefContentWidth
JAVA手机网[www.cnjm.net] 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
JAVA手机网[www.cnjm.net] ItemCommandListener.commandAction ItemStateListener.itemStateChanged 由Display.callSerially引发的Runnable.run
记住定时器(Timer)事件并非UI事件,定时器的回调方法是可以和UI事件回调方法同时调用的,不过同一个Timer对象中的多个TimerTask则是序列化调用的。如果应用程序使用了定时器,那么当定时器事件回调和UI事件回调同时发生时,应用程序必须自己确保其数据结构的安全。应用程序也可以选择使用Display.callSerially()方法来把定时器事件序列化到UI事件队列中去以避免同步问题。
|
|
|
|