国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

J2ME學習--了解MIDlet的生命周期(圖)

2019-11-18 15:54:20
字體:
來源:轉載
供稿:網友

  前面搞明白了怎樣利用eclipse編寫基本的MIDlet。對MIDlet的基本結構也有所了解。但 MIDlet 具體是怎樣運行的?三個狀態間又是怎樣的轉換的?這些疑問需要自己一點一點的去解開……
  
  以前面的HelloMidlet 程序為例,這次為了清楚程序的執行情況,加了幾句PRintln。具體代碼如下:
  
  import javax.microedition.midlet.MIDlet;import javax.microedition.midlet.MIDletStateChangeException;import javax.microedition.lcdui.*;/* * 創建日期 2005-10-5 * * TODO 要更改此生成的文件的模板,請轉至 * 窗口 - 首選項 - Java - 代碼樣式 - 代碼模板 *//** * @author Snail * * TODO 要更改此生成的類型注釋的模板,請轉至 * 窗口 - 首選項 - Java - 代碼樣式 - 代碼模板 */public class HelloMidlet extends MIDlet {   private Display display;   private Form form; /** *  */ public HelloMidlet() { // TODO 自動生成構造函數存根 System.out.println("ConstrUCtor"); display = Display.getDisplay(this); } /* (非 Javadoc) * @see javax.microedition.midlet.MIDlet#startApp() */ protected void startApp() throws MIDletStateChangeException { // TODO 自動生成方法存根 System.out.println("startApp called"); form = new Form("HelloMidlet"); form.append("Welcome to J2ME world!"); display.setCurrent(form); } /* (非 Javadoc) * @see javax.microedition.midlet.MIDlet#pauseApp() */ protected void pauseApp() { // TODO 自動生成方法存根 System.out.println("pauseApp called"); form = new Form(""); } /* (非 Javadoc) * @see javax.microedition.midlet.MIDlet#destroyApp(boolean) */ protected void destroyApp(boolean arg0) throws MIDletStateChangeException { // TODO 自動生成方法存根 System.out.println("destroyApp called:" + arg0); }}
  
  仔細觀察代碼,我只是在構造方法體和三個方法內分別添加了標志。方便我們在運行的時候 了解程序具體的執行情況。運行程序,當模擬器出現歡迎界面時,仔細觀察eclipse的控制臺。我們看到 如下信息:
  
  正在通過存儲根 DefaultColorPhone 來運行
  
  ConstructorstartApp called
  
  系統首先調用構造方法,構造完成后MIDlet是處于暫停狀態,緊接著會很快的轉換到活動狀態,然后才調用startApp 方法。 現在的Midlet 已經處于活動狀態。但是應用程序治理器會因為某些情況要求程序暫停 ,比如手機忽然來電 或者短消息 等。應用程序治理器為了節省更多的系統資源 ,會首先調用pauseApp方法釋放一部分Midlet非必須的資源,然后再轉換到暫停狀態。所以一般在pauseApp()方法內應該添加釋放資源的必需代碼。上面的pauseApp()方法內
  
  form = new Form("");
  
  可以模擬將form所占的內存釋放掉。WTK 模擬器可以模擬系統調用pauseApp()的情況。
  
J2ME學習--了解MIDlet的生命周期(圖)

  當我們暫停時 看看控制臺 ,果然已經打印出"pauseApp called" 。當處理完外部事件,我們返回Midlet 時 系統將Midlet暫停狀態再次轉換到活動狀態,接著再調用startApp 方法恢復Midlet 所需要的資源。程序中startApp()方法內
  
  form = new Form("HelloMidlet");form.append("Welcome to J2ME world!");
  
  可以重新將form的內容恢復。
  
  看看控制臺 再次打印出 "startApp called"。
  
  我們看到startApp()方法在一個Midlet中可能會多次調用。所以我們應該注重:Midlet的初始化過程和主要執行過程 并不是要全部寫在startApp()方法體內。那些只執行一次 并且在程序初始化時執行的初始化動作 ,應該放在構造方法內。仔細觀察控制臺信息,還應該注重的是,構造方法只是在最初初始化時被系統調用,而且只有無參的構造方法才能被系統自動調用。假如把form的初始化工作放在構造方法內進行,當Midlet從暫停狀態恢復到活動狀態,重新調用startApp()方法時,form的內容就無法恢復了。
  
  當我們強制關閉模擬器終止Midlet時,控制臺打印出如下信息:
  
  destroyApp called:true   Execution completed.
  
  此時 控制臺打印的 是 true ,即傳入 destroyApp(boolean arg0)的參數為true。這表示 系統無條件終止該程序,并釋放一切占用的資源。假如為false ,Midlet可以通過拋出一個MIDletStateChangeException 異常來向系統發出請求 。此時就有可能使Midlet 繼續保持其當前狀態。
  
  另外Midlet本身也可以主動要求狀態轉換。以活動狀態-->暫停狀態為例。Midlet必須調用notifyPaused()方法通知應用程序治理器 :我要暫停運行,然后由應用程序治理器根據情況對Midlet做相應的轉變。假如Midlet只是調用pauseApp()方法,系統只會執行其中的代碼 ,并不會進行狀態轉換。但是當Midlet調用notifyPaused()時 pauseApp()并不會被調用。最好是在調用notifyPaused()之前先調用pauseApp()。同樣手動關閉Midlet時也一樣 ,應該在調用notifyDestroyed()方法之前先調用destroyApp()方法。這些情況都是非強制性的,所以在請求 轉換到銷毀狀態時傳入的參數 最好是 false。
  
  現在看來,狀態轉換需要調用的startApp()  pauseApp() destroyApp() 方法具體工作也只是提供初始化資源 、釋放資源的地方。
  
  到此為止,對Midlet的執行情況和生命周期 也有了大概的了解。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 韶关市| 敦化市| 西城区| 行唐县| 获嘉县| 庄河市| 金堂县| 兴安盟| 衡山县| 温泉县| 闸北区| 镇江市| 古丈县| 石阡县| 南安市| 通河县| 博客| 清涧县| 四平市| 岳池县| 峡江县| 天津市| 辉县市| 永德县| 太仆寺旗| 木兰县| 新蔡县| 景谷| 奉贤区| 石楼县| 天全县| 湛江市| 綦江县| 东阳市| 历史| 太康县| 姚安县| 左权县| 望奎县| 安阳市| 东阿县|