(轉帖)深入理解Midlet類

在J2ME編程過程中,MIDlet是最核心的類之一,熟悉該類的使用是J2ME學習過程中必須首先掌握的類,下面就結合實際介紹一下該類的實際使用。

       衆所周知,J2ME程序都是從MIDlet類開始執行,系統規定了MIDlet的生命週期。規定MIDlet程序有三種狀態:

1、  暫停狀態

2、  運行狀態

3、  銷燬狀態

系統在執行MIDlet程序時,首先構造一個MIDlet類型的對象,然後使程序進入到暫停狀態,按照生命週期的規定,系統會自動調用MIDlet對象的startApp方法使程序進入到運行狀態,開始程序的執行。如果在創建MIDlet對象的過程中,或者是調用startApp的方法中發生了異常,則系統會自動調用MIDlet對象的destroyApp方法進行到銷燬狀態,也就是使程序退出。

所以生命週期中的第一個需要注意的地方就是熟悉在以上狀態轉換過程中,系統會自動調用的方法,然後在實際編寫MIDlet類的時候,在這些方法中書寫合適的代碼,這樣就可以在系統規定的狀態轉換時,自動調用這些方法。

另外一個需要說明的狀態是暫停狀態,系統在程序運行過程中,如果手機有來電,則系統會自動的使MIDlet程序進行到暫停狀態,在進入到暫停狀態以前,系統會自動調用MIDlet對象的pauseApp方法。當電話接聽完畢以後,系統會自動使MIDlet程序進行到運行狀態,在進入到運行狀態以前,系統還會自動調用startApp方法使系統進入到運行狀態。

對於上面的內容做一個簡單的總結:

1、  startApp方法

在系統第一次運行的時候,系統會自動調用該方法使系統進入到運行狀態。

當系統從暫停狀態切換到運行狀態以前,系統也會自動調用該方法。

 

2、  pauseApp方法

當系統從運行狀態切換到暫停狀態以前,會自動調用該方法。

3、  destroyApp方法

當系統發生異常退出程序以前,會自動調用該方法。該方法有一個boolean類型的參數,如果該參數爲true則代表該方法必須清理和釋放資源,如果爲false可以拋出一個MIDletStateChangeException異常來表明它不想立即退出。

       熟悉了這幾個方法的使用以後,可以實現很多實用的功能,下面介紹兩個實際功能的實現:

1、  實現來電話時暫停的功能

在實際的MIDlet編程中,必須實現手機來電時暫停程序的功能,如果有線程時,還需要把線程停止掉,然後當電話結束以後,重新顯示界面,並重新啓動線程。

startApp方法的具體的實現代碼框架如下:

public void startApp(){

        //獲得當前顯示的界面

        Displayable curr = display.getCurrent();

        //判斷是否是第一次運行

        if(curr == null){

               //顯示第一個界面,例如logo界面

 

        }else{

               //顯示來電以前的界面

               display.setCurrent(curr);

               //如果需要,還可以啓動線程

        }

}

如果遊戲界面中有線程,則需要在來電時暫停線程,而pauseApp在暫停以前會被系統調用,所以可以在pauseApp方法中實現該功能。pauseApp方法的實現代碼框架如下:

        public void pauseApp(){

               //獲得當前顯示的界面

                      Displayable curr = display.getCurrent();

                      //判斷是否是遊戲界面

                      if(curr instanceof GameCanvas){

                             //停止線程

                      }

        }

2、  實現按掛機時清理的功能

熟悉MIDlet編程的人都知道,在程序運行過程中按掛機鍵,可以使MIDlet程序退出,在低級用戶界面編程中,可以在keyPressed方法中捕獲該事件,但是卻無法處理,因爲捕獲以後,程序就直接退出了。

如果遊戲中有背景音樂等,則當按掛機鍵直接退出的時候,音樂還會存在,這樣就會造成很多的問題。但是按掛機鍵以後,在程序退出以前,系統會自動調用destroyApp方法,所以可以把最後處理的代碼放置在destroyApp方法中。

      

       下面接着來看一下另一組方法,來繼續熟悉MIDlet類的使用:

1、  notifyPaused

使程序進入暫停狀態

2、  notifyDestroyed

是程序進入到銷燬狀態。

       以上兩個方法和上面的三個方法不同,上面的三個方法是在狀態切換過程中,會自動被系統調用。而這兩個方法不會被系統自動調用,但是程序員在實際編程過程中可以手動調用這兩個方法,使程序進入指定的狀態。

       比如如果想實現程序退出的功能,就只需要使MIDlet程序進入到銷燬狀態即可,也就是只需要手動調用notifyDestroyed方法即可。

       上面是MIDlet類中最主要的兩組方法,下面分MIDP1.0和MIDP2.0來分別介紹剩下的方法的作用。首先看一下MIDP1.0中的兩個方法:

1、  getAppProperty

獲得jad文件和manifest文件中屬性的值,如果一個屬性在以上兩個文件中都包含,則以jad文件中的屬性值爲準。

2、  resumeRequest

系統通過調用該軟件來判斷是否需要使該MIDlet進入運行狀態。如果需要進入運行狀態,則系統會自動調用startApp方法。

       在MIDP2.0中,MIDlet類中新增了兩個方法,下面介紹一下這兩個方法的作用,依次是:

1、  checkPermission

該方法是MIDP2.0的安全許可機制,在程序的實際使用過程中,可以通過該方法來檢查MIDlet是否允許特定的操作,例如聯網、發送短信息等等。

如果不允許該操作則返回0,允許返回1,未定義則返回-1。

 

2、  platformRequest

使用該方法可以訪問某些系統功能,例如通用的功能主要有兩種

使系統打開瀏覽器訪問某個特定的網址:

        platformRequest(“http://wap.sina.com.cn”);

這個功能可以實現用來實現提示用戶下載新的程序版本等功能。

使手機撥打特定的電話號碼:

        paltformRequest(“tel:1860”);

        則系統會自動利用手機來撥打1860。

發佈了16 篇原創文章 · 獲贊 5 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章