日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MDIP的生命周期

發(fā)布時間:2025/3/13 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MDIP的生命周期 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
MDIP的狀態(tài)有三種:paused,active,destroyed

通常的格式如:
public class MyMIDlet extends MIDlet{
?? ?MyMIDlet(){}
?? ?protected void startApp() throws MIDletStateChangedException{}
?? ?protected void pauseApp(){}
?? ?protected void destroyApp(boolean uncoditional) throws MIDletStateChangedException{}
}

各方法的調(diào)用情況是:
1.MIDlet被loaded,MIDlet的初始化狀態(tài)為paused,此時執(zhí)行初始化,即運行構(gòu)造方法。如果在初始化MIDlet時出現(xiàn)任何錯誤的話,MIDlet就直接被置為distroyed狀態(tài)了。
2.從paused轉(zhuǎn)換為active狀態(tài)時,設備調(diào)用startApp。這個方法名有一定的誤導作用,因為此方法是在paused->active時調(diào)用的,而非僅僅在app開始的時候調(diào)用。
3.從active->paused時,調(diào)用pauseApp方法
4.從active->destroyed或paused->destroyed時,調(diào)用distroyed方法

與直覺相違背的是:
1. 通常情況下,大多數(shù)初始化工作是放在startApp中完成的,而非構(gòu)造函數(shù)。這主要是因為移動設備的資源性能都有限,因此此種程序開發(fā)的一個宗旨是“在 需要用資源的時候申請,用完立刻釋放”。另外,根據(jù)MDIP的說明,MIDlet只有在調(diào)用startApp的時候才能確保擁有對Display的使用 權(quán),所以在構(gòu)造函數(shù)中對Display做任何操作有可能出現(xiàn)錯誤。
2.前面說過,startApp這個函數(shù)不是僅僅在MIDlet start的時候才被調(diào)用,而是每次從paused狀態(tài)轉(zhuǎn)換到active狀態(tài)時都會被調(diào)用,因此startApp的格式通常應該是這樣
protected void startApp() throws MIDletStateChangedException{
?? ?//started is a member of this MIDlet which is boolean with init value false
?? ?if(!started){
?? ??? ?//initialize
?? ??? ?started = true;
?? ?}else{
?? ??? ?//resume from paused state
?? ?}
?? ?
?? ?//the other things
}
3.最重要的在于,MIDlet的狀態(tài)轉(zhuǎn)換不是由程序自身控制的,而是由host platform控制的:
?? ?a.啟動時,調(diào)用startApp
?? ?b.暫停時(比如突然進來一個電話,用戶要接),調(diào)用pauseApp
?? ?c.恢復暫停時,調(diào)用startApp
?? ?d.程序關(guān)閉時,調(diào)用destroyApp
當然,在程序中控制狀態(tài)的轉(zhuǎn)換也是有辦法的:
?? ?notifyPaused();
?? ?notifyDestroyed();
?? ?resumeRequest();
這 三個函數(shù)分別向platform申請active->paused;active/paused->destroyed;paused- >active三種狀態(tài)轉(zhuǎn)換(paused->destroyed的轉(zhuǎn)換是可能的,因為用戶在暫停了一個程序后,又想關(guān)閉它,總不需要再激活 他一下吧)。值得注意的是,在程序中通過這種方式申請狀態(tài)轉(zhuǎn)換時,platform并不會再去調(diào)用pauseApp和destroyApp,因為它認為程 序是在準備好了的狀況下才會申請狀態(tài)變遷的。三個轉(zhuǎn)換申請的調(diào)用推薦如下格式:
############
pauseApp();
notifyPaused();
############
//destroy后面會具體說明
try{
?? ?destroyApp(false);
?? ?notifyDestroyed();
}catch(MIDletStateChangedException msce){
?? ?//MIDlet don't want to be destroyed
}
############
//resumeRequest的意思是platform在不久后調(diào)用startApp,因此不用先做狀態(tài)轉(zhuǎn)換的準備
resumeRequest();
############
還 有一點值得注意的是,由于destroyApp可能在active時被調(diào)用,也可能是paused時被調(diào)用,有時候有必要檢查一下MIDlet當時的狀 態(tài)。destroyApp的作用是釋放MIDlet占有的所有資源,而paused卻要釋放暫時不需要的資源并保存需要的狀態(tài)變量,所以在destroy 函數(shù)中針對不同狀態(tài)做不同的資源釋放有時是很有必要的。

!!關(guān)于MIDletStateChangedException
startApp和destroyApp都會拋出這個異常,一一說明如下:
*startApp:
?? ?1.當出現(xiàn)了transient failuer時,即遇到暫時的問題導致startApp運行不下去,它會拋出一個MIDletStateChangedException,然后回到paused狀態(tài),以便下次再startApp;
?? ?2.當出現(xiàn)non-transient failuer時,notifyDestroyed就應該被調(diào)用了(后面說明);
?? ?3.當出現(xiàn)了RuntimeException時,MIDlet就立刻被destroyed了——當然destroyApp會被先調(diào)用。

*destroyApp:
?? ?destroyApp的作用是釋放所有的資源(包括各個線程)。其參數(shù)為true表示無條件釋放(正如其名稱unconditional)。
?? ?1.當platform進行狀態(tài)轉(zhuǎn)換時,unconditional是true;
?? ?2.當MIDlet自身要求進行destroy時——比如響應用戶按下EXIT按鈕事件,建議使用前述的方式:
?? ??? ?try{
?? ??? ??? ?destroyApp(false);
?? ??? ??? ?notifyDestroyed();
?? ??? ?}catch(MIDletStateChangedException msce){
?? ??? ??? ?//MIDlet don't want to be destroyed
?? ??? ?}
?? ?false表示,當釋放資源時遇到了某些不能釋放的東西——比如需要保存的文件——就拋出一個MIDletStateChangedException,以便做相應的處理。顯然,這種方式更加friendly。
?? ?另外,對于MIDlet來說,notifyDestroyed()是唯一可以強行退出程序的方法。調(diào)用Syste.exit或Runtime.exit都會拋出SecurityException。

最后需要注意一個細節(jié)是:startApp會運行到結(jié)束,然后卻不會自動轉(zhuǎn)入destroyed 或 paused狀態(tài),而是停留在active的狀態(tài)——MIDlet程序通常都是事件驅(qū)動的,誰也不希望程序在用戶沒有發(fā)出退出命令時就自己退了出去。



原文地址:http://www.ulcms.com/html/java/javame/20070927/MDIP_570.htm

轉(zhuǎn)載于:https://www.cnblogs.com/BoiledWater/archive/2009/08/11/1543505.html

總結(jié)

以上是生活随笔為你收集整理的MDIP的生命周期的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。