关于unconditional

在active状态调用destroyApp(boolean unconditional)或者pauseApp()方法可以使得MIDlet进入destroyed或者pause状态。值得一提的是destroyApp(boolean unconditional)方法,很多开发者对unconditional参数不是很理解,事实上,当destroyApp()方法被调用的时候,AMS通知MIDlet进入destroyed状态。在destroyed状态的MIDlet必须释放了所有的资源,并且保存了数据。如果unconditional为false的时候,MIDlet可以在接到通知后抛出MIDletStateChangeException而保持在当前状态,如果设置为true的话,则必须立即进入destroyed状态。--mingjava的专栏

destroyXlet(boolean unconditional)

  该方法通知Xlet结束运行,转入拆除状态。Xlet应当释放所有的资源。参数unconditional由管理器设置,表示是否要无条件地拆除Xlet。如果unconditional是false,Xlet可以抛出一个StateChangeException异常,表示自己不想被拆除——但是,是否接受Xlet请求最终还是由管理器决定。也就是说,虽然Xlet有权合法地抛出StateChangeException异常,但最终决定其命运的还是管理器。如果管理器接受了Xlet要求不拆除的请求,它会给Xlet一些时间,一定的时间后再次调用destory()方法,这次unconditional一般会设置成true。当unconditional参数是true时,管理器将忽略任何XletStateChangeException异常,一旦destoryXlet()返回就直接拆除Xlet。

  可以从生命周期方法抛出的异常有两种:XletStateChangeException,未被捕获的RuntimeException或错误。

  如果生命周期方法抛出了未处理的RuntimeException或错误,管理器将立即调用Xlet的destoryXlet(true)方法,将Xlet拆除。因此,Xlet应当捕获所有“正常的”(原因已知的)RuntimeException或错误,避免将RuntimeException直接抛给管理器从而导致Xlet被拆除。相对而言,XletStateChangeException可以由Xlet有意地抛出,表示Xlet尚未做好改变状态的准备。 --赛迪网

你可能感兴趣的:(3,Java)