欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

如何優(yōu)化J2ME應(yīng)用程序-創(chuàng)新互聯(lián)

這篇文章主要介紹“如何優(yōu)化J2ME應(yīng)用程序”,在日常操作中,相信很多人在如何優(yōu)化J2ME應(yīng)用程序問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對(duì)大家解答”如何優(yōu)化J2ME應(yīng)用程序”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!

創(chuàng)新互聯(lián)是一家專注于網(wǎng)站設(shè)計(jì)、成都網(wǎng)站設(shè)計(jì)與策劃設(shè)計(jì),寧遠(yuǎn)網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)10年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:寧遠(yuǎn)等地區(qū)。寧遠(yuǎn)做網(wǎng)站價(jià)格咨詢:18980820575

如果要說j2me應(yīng)用程序和j2se應(yīng)用程序有什么不同的地方的話,那就是他們各自被限制運(yùn)行的環(huán)境。
很多J2ME系統(tǒng)的主要的瓶頸是存儲(chǔ)和運(yùn)行應(yīng)用程序的可用內(nèi)存數(shù)量。舉例來說,當(dāng)前許多MIDP設(shè)備,他們
限制給應(yīng)用程序的內(nèi)存數(shù)量就只有50K或更少,離可能要求兆級(jí)的基于服務(wù)端J2SE環(huán)境有段很長的距離。
由于你在開發(fā)中會(huì)很容易就遭遇這些限制,所以在這篇J2ME技術(shù)提示中,你會(huì)學(xué)到如何讓你的應(yīng)用程序占用最
少的內(nèi)存。你將用這些技術(shù)減少M(fèi)IDlet占用的空間,MIDlet只是顯示一個(gè)文本框并且在其中內(nèi)容被更改
的時(shí)候發(fā)出聲音:
package com.j2medeveloper.techtips;

import Javax.microedition.lcdui.*;

public class BeforeSizeOptimization extends
  BasicMIDlet {

  public static final Command exitCommand =
  new Command( "Exit",
  Command.EXIT, 1 );

  public BeforeSizeOptimization(){
  }

  protected void initMIDlet(){
  getDisplay().setCurrent( new MainForm() );
  }

  public class MainFoRM extends Form {
  public MainForm(){
  super( "MainForm" );

  addCommand( exitCommand );
  append( textf );

  setCommandListener( new CommandListener(){
  public void commandAction( Command c,
  Displayable d ){
  if( c == exitCommand ){
  exitMIDlet();
  }
  }
  }
  );

  setItemStateListener(
  new ItemStateListener() {
  public void itemStateChanged(
  Item item ){
  if( item == textf ){
  AlertType.INFO.playSound(
  getDisplay() );
  }
  }
  }
  );
  }

  private TextField textf =
  new TextField( "Type anything", null,
  20, 0 );

  }
}

盡管這個(gè)例子只演示了MIDlet,但是其中用到的技術(shù)可以用來優(yōu)化任何J2ME程序。
注意上面演示的MIDlet要靠下面這個(gè)類:
package com.j2medeveloper.techtips;

import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;

public abstract class BasicMIDlet extends MIDlet {

  private Display display;

  public BasicMIDlet(){
  }

  protected void destroyApp( boolean unconditional )
  throws MIDletStateChangeException {
  exitMIDlet();
  }

  public void exitMIDlet(){
  notifyDestroyed();
  }

  public Display getDisplay(){ return display; }

  protected abstract void initMIDlet();

  protected void pauseApp(){
  }

  protected void startApp()
  throws MIDletStateChangeException {
  if( display == null ){
  display = Display.getDisplay( this );
  initMIDlet();
  }
  }

}
你用J2ME Wireless Toolkit打包以后,這個(gè)MIDlet例子僅僅4K多一點(diǎn)。

減少size的第一步是通過減少應(yīng)用程序功能來移除一些不必要的類。你的應(yīng)用程序的每個(gè)特性都是真的必要的嗎?
你的用戶能否忍受沒有鈴聲和哨聲?讓我們來建立最小版本的應(yīng)用程序。注意到MIDlet例子已經(jīng)是相當(dāng)小的了。

第二步著眼于應(yīng)用程序定義的內(nèi)部類,特別是匿名類。記住每一個(gè)類文件都有一定相應(yīng)的空間開支。甚至最微不足道的
類也需要成本:
  public class foo {
  // nothing here
  }
編譯這個(gè)類,你可以發(fā)現(xiàn)你得到一個(gè)占用幾乎200字節(jié)空間的class文件。一個(gè)匿名類一般用途是用來實(shí)現(xiàn)事件監(jiān)聽。
MIDlet例子定義了兩個(gè)listener。一個(gè)簡單優(yōu)化就是讓MIDlet的主類實(shí)現(xiàn)CommandListener和ItemStateListener
兩個(gè)接口,刪除里面的listener代碼。記住多個(gè)對(duì)象可以使用相同的listener。如果需要區(qū)別開來,
可以傳遞參數(shù)給commanAction和itemStateChanged方法。

內(nèi)部類也會(huì)通過其他方面膨脹代碼,因?yàn)榫幾g器必須產(chǎn)生不同的變量和方法來允許一個(gè)內(nèi)部類訪問封裝類里面的私有信息。

第三步是大程度使用內(nèi)置的類。舉個(gè)例子,在基于CLDC的程序中不要建立你自己的集合類。盡量使用內(nèi)置的Hashtable
和Vector。設(shè)計(jì)MIDP應(yīng)用也是一樣。MIDlet例子定義了一個(gè)Form子類來創(chuàng)建它的主form,但它還能被很容易地直接創(chuàng)建:
  mainForm = new Form( "MainForm" );
  mainForm.addCommand( okCommand );
  mainForm.setCommandListener( listener );
這里沒有對(duì)和錯(cuò)的問題,這只是需要考慮的一些簡單的東西。

第四步是取消你應(yīng)用程序的繼承關(guān)系。你可能已經(jīng)將代碼分解成一個(gè)或多個(gè)抽象類,這是個(gè)被推薦的能提高代碼重用
的OOD設(shè)計(jì)方法。也許會(huì)跟你學(xué)到的東西有抵觸,但去簡化繼承層次更加說的過去。如果你的抽象類——可能來自其他項(xiàng)目——
只是被繼承了一次,那簡化繼承關(guān)系就顯得特別有理由。MIDlet例子擴(kuò)展了BaicMIDlet類,但兩個(gè)類很容易組合成一個(gè)。

第五步是縮短你的包名,類名,方法名和數(shù)據(jù)成員名。看上去這一步顯得很愚蠢,但一個(gè)class文件保存了很多字符信息。
縮短他們的名字你會(huì)減少clas文件的size。這個(gè)辦法節(jié)省的東西不會(huì)很多,但當(dāng)遍及到多個(gè)類時(shí)他們會(huì)增加。包名特別
應(yīng)該被縮短。因?yàn)镸IDP應(yīng)用程序完全是獨(dú)立的,你能完全避免包名——不會(huì)有機(jī)會(huì)跟該設(shè)備其他類的名字沖突。MIDlet例子
可以從com.j2medeveloper.techtips 包里面移出來。

注意縮短名字不是你手工要做的那些東西,我們可以使用一個(gè)名叫“擾亂器”的工具來做。擾亂器的主要目的是
為應(yīng)用程序“隱藏”代碼,它反編譯程序的時(shí)候使程序變成一些幾乎無法閱讀的東西。這個(gè)過程的另外一個(gè)作用就是減少了程序的size。
那上因?yàn)殡[藏代碼主要通過重新為方法和數(shù)據(jù)成員命名。這里有個(gè)開發(fā)源代碼的擾亂器叫RetroGuard的免費(fèi)工具來自
http://www.retrologic.com,并且上面還有許多商業(yè)用的包。

最后,關(guān)注一些數(shù)組的初始化。(MIDlet例子沒有做任何數(shù)組初始化,但這是程序很重要的一步)當(dāng)編譯完以后,一個(gè)數(shù)組初始化
代碼像這樣:
int arr[] = { 0, 1, 2, 3 };
實(shí)際產(chǎn)生的代碼如下:
  arr[0] = 0;
  arr[1] = 1;
  arr[2] = 2;
  arr[3] = 3;
如果想研究的話,可以使用java2sdk一起發(fā)布的將字節(jié)代碼分解成一個(gè)class的javap工具(使用-c參數(shù))。你可能會(huì)驚訝和不滿
你所看到的結(jié)果。兩種可選的辦法是(1)把數(shù)據(jù)編碼到一個(gè)String里面,運(yùn)行時(shí)解碼到數(shù)組,或(2)將數(shù)據(jù)作為二進(jìn)制文件保存
到程序包里面并在運(yùn)行時(shí)用class loader的getReourceAsStream方法訪問。

這里說的東西只是一些指導(dǎo),并且在這里提到的不是每一步都適合每一個(gè)J2ME應(yīng)用程序。然而,他們大部分都可以應(yīng)用這個(gè)MIDlet例子。
MIDlet的優(yōu)化版本如下:
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;

public class ASO extends MIDlet
  implements CommandListener,
  ItemStateListener {

  private Display  display;
  private Form  mainForm;
  private TextField mainFormTF =
  new TextField( "Type anything", null,
  20, 0 );

  public static final Command exitCommand =
  new Command( "Exit",
  Command.EXIT, 1 );

  public ASO(){
  }

  public void commandAction( Command c,
  Displayable d ){
  if( c == exitCommand ){
  exitMIDlet();
  }
  }

  protected void destroyApp( boolean unconditional )
  throws MIDletStateChangeException {
  exitMIDlet();
  }

  public void exitMIDlet(){
  notifyDestroyed();
  }

  public Display getDisplay(){ return display; }

  protected void initMIDlet(){
  mainForm = new Form( "MainForm" );
  mainForm.addCommand( exitCommand );
  mainForm.setCommandListener( this );
  mainForm.setItemStateListener( this );
  mainForm.append( mainFormTF );

  getDisplay().setCurrent( mainForm );
  }

  public void itemStateChanged( Item item ){
  if( item == mainFormTF ){
  AlertType.INFO.playSound( getDisplay() );
  }
  }

  protected void pauseApp(){
  }

  protected void startApp()
  throws MIDletStateChangeException {
  if( display == null ){
  display = Display.getDisplay( this );
  initMIDlet();
  }
  }
}

到此,關(guān)于“如何優(yōu)化J2ME應(yīng)用程序”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

本文標(biāo)題:如何優(yōu)化J2ME應(yīng)用程序-創(chuàng)新互聯(lián)
瀏覽地址:http://chinadenli.net/article26/dhjocg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計(jì)靜態(tài)網(wǎng)站、電子商務(wù)品牌網(wǎng)站制作、網(wǎng)站排名標(biāo)簽優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)