一个midlet有几个线程【转载】

上面的方法中应用了多态!
======================================================
JAMS应该还有一个机制来监听midlet的状态的转变,当你调用

destroyApp(false);noticeDestroyed();时,这个机制就将当前状态转变为销毁态,当你调用

pauseApp();noticePause();时,这个机制就将当前状态转变为暂停态。notice方法正是这个机制和midlet的通信接口!
======================================================
所以说,midlet不是一个严格意义上完整的程序,它的很大一部分都由JAMS来做了。
======================================================
我再对我发的楼顶帖作以修改:
标题:敲开MIDlet的脑壳----在MIDlet中另外运行的两个线程
先定义几个名词:
1.MyMIDlet是继承了MIDlet的类(至于MyMIDlet是否实现其它接口,我们不去关心)
2.MyCanvas是继承了Canvas的类(MyCanvas是否实现其它接口,我们也不去关心)
3.“进入”表示跟进debug的路线
第一个“另外”:
经过debug,我发现,在主线程中,一个midlet中最先被执行的代码是MyMIDlet类的对象的构造函数,而后进入了java.lang.Class类(public final)的runCustomCode()方法(static),而后再进入com.sun.midp.midlet.MIDletState类(public abstract)中未知方法(调试看不出来,如有人知道请告知),而后再进入com.sun.midp.midlet.Selector类(extends MIDlet implements CommandListener, Runnable)中,启动了run()方法,第一个“另外”诞生了。

第二个“另外”:
接着上面继续debug:
下来才是调用MyMIDlet类实例的startApp方法,执行
Display.getDisplay(this).setCurrent(Displayable),由于setCurrent的参数是MyCanvas类的实例,所以,这一执行(指Display.getDisplay(this).setCurrent(Displayable))即调用(进入)了MyCanvas的paint()方法,所以,Display的成员方法setCurrent应该类似于下面的代码:
public void setCurrent(Displayable d){
... ...
Graphics g = d.getGraphics();//生成Graphics实例
d.paint(g);
... ...
}

在执行完paint方法之后,进入了Canvas类中的其它未知方法,而后再进入Display的未知方法,而后进入几个无关类之后就断掉了,原因无从查找,不过我们可以这样得到第二个另外:
在模拟器单击开始,你会发现又能debug了,这时,当你执行完commandAction方法后,再debug几次,你就进入了这么一个类:com.sun.midp.lcdui.DefaultEventHandler(public & implements EventHandler),而后进入com.sun.midp.lcdui.AutomatedEventHandler(public & extends DefaultEventHandler implements AutomationHandler)类,这两个类成继承关系,而在DefaultEventHandler类中又有一个内部类VMEventHandler(implements Runnable)实现了run()方法,所以,第二个“另外”产生了:)

关于第一个“另外”:我认为这个线程是监听midlet状态的监听线程,叫状态监听线程

关于第二个“另外”:我认为是监听键盘输入的监听线程,叫键盘监听线程

所以,在一个midlet中,一般有下面这四个线程:

1.主线程

2.状态监听线程

3.键盘监听线程

4.自己实现的画动画的线程。

关于自己程序中画动画的线程(该线程中实现了对动画的repaint):
该线程在上述步骤中已经启动,启动的地方通常有两个,一处是在MIDlet对象的构造过程中(如果有和该对象成聚合关系的其它对象,则也在这里初始化);另外一处则在startApp()方法中,在实现了Display.getDisplay(this).setCurrent(Displayable);语句之后。
=======================================================================
在上面的debug过程中,我使用的是sun自己的wtk2.1,别的api的debug过程可能不一样,但是这是大同小异的,你可以触类旁通。
比如西门子的api中监听键盘线程在javax.microedition.lcdui.EventQueue(final & implements Runnable)中实现.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值