亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

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

教你一招:優化J2ME程序大小的方法

2019-11-18 12:45:33
字體:
來源:轉載
供稿:網友

  要把J2ME程序與J2SE程序區分開來,其依據就是J2ME運行所處的受限環境。多數J2ME系統的主要受限條件就是可以存儲和運行程序所需內存的大小。例如,許多MIDP設備限制應用程序的尺寸不大于50K,這遠遠不及Server端J2SE運行環境下那些成兆的程序。實際應用中,程序會很輕易超出這些限制條件。通過本篇您將學到一些減小程序尺寸大小的技巧,并在下面的例子中實踐這些技術。這個例子MIDlet僅僅顯示一個文本框并在其內容改變時發聲。
  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 );
  }
  }
  雖然這個MIDlet在此僅作為一個例子,但使用的尺寸優化技巧可以適用于任一J2ME的profile上。
  注重,上面的MIDlet類需要下面的輔助類:
  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 WTK打包時,本例子MIDlet占用4K空間。
  
  減小尺寸的首要步驟就是通過修正程序的功能實現來去掉多余的類。程序的所有功能確實必須都實現嗎?用戶可以不需要這些“附屬功能”嗎?要設計盡可能小的程序,這里的MIDlet例子已經相當小了。
  
  第二步就是深入考察程序定義的內部類,非凡是匿名類。記住,每個類文件都有一定量的與之相關的系統開銷。即便最普通的類也有系統開銷。
  public class foo {
  // nothing here
  }
  編譯上邊的類,生成的類文件大約200byte大小。比如實現一個事件監聽器,就是對匿名類的常見使用。在例子MIDlet中就定義了兩個此類的監聽器。接下來進行的最簡單的優化就是,讓主MIDlet類實現CommandListener和ItemStateListener接口,并把監聽器代碼移至此處。記住,多個對象可以使用同樣的監聽器。必要時,可以使用傳遞至commandAction和itemStateChanged方法的參變量來區分它們。
  
  內部類也可使代碼過大,因為編譯器必須生成非凡的變量和方法,以便內部類可以訪問包含它們的類的私有內容。請參考內部類的規范以獲取更多信息。
  
  第三步,盡量使用現有的類。例如,基于CLDC的profile沒有構造集合類,所以我們可以用內建的Hashtable和Vector類來實現之。構造MIDP程序時也可采用此法。例子MIDlet中定義了一個form字類來生成主表,可以輕易的如下直接生成:
  
  mainform = new form( "Mainform" );
  mainform.addCommand( okCommand );
  mainform.setCommandListener( listener );
  
  這里沒有正確或者錯誤的答案,只是要推敲。
  
  第四步就是破壞程序的繼續關系。你也許把相關的代碼放到一個或多個抽象類中,這是OOD中為提高程序間代碼重用的推薦做法。雖然破壞繼續關系與你所學知識相違反,但簡化的繼續關系更有意義。非凡的,當你的的抽象類?D?D可能來自其他項目?D?D僅僅被繼續一次時,破壞繼續關系的結果不言而喻。例如,例子MIDlet繼續了BasicMIDlet類,但兩者合并為一個類。
  
  第五步就是要縮短名字長度,如包名、類名、方法名和數據元素名??雌饋碛行┐?,但一個類文件確實包含太多的符號信息??s短各量的名字可以縮小生成的類文件尺寸。這種節省不會非凡明顯,但多個類中進行總加的結果還是可觀的。包名對減小尺寸來講非凡合適。MIDP程序是完全自我包容的,完全可以不使用包名,因為在手持設備上包名根本不可能與其他類名沖突。例子MIDlet中,可以把com.j2medeveloper.tchtips包名去掉。
  
  注重,一般來講,縮短名字不需要手工去做,要用一個“混淆器”去做?!盎煜鳌钡闹饕δ苁恰半[藏”程序代碼,使之不能通過反編譯讀出。它的副作用是減小了程序的尺寸。因為隱藏過程主要通過更改方法和數據成員的名字來完成。有一個開源的混淆器稱為RetroGuard,可以免費從http://www.retrologic.com得到。也有一些商業包可用。(當為基于CLDC的profile混淆時,記得在預校驗之前混淆,否則混淆器將使類文件中的預校驗數據失效。)
  
  最后,深入數組的初始化。(例子MIDlet沒有做數組初始化,但對程序來說初始化是重要的一步) 在編譯時,一個數組初始化聲明如下所示:
  
  int arr[] = { 0, 1, 2, 3 };
  而實際生成代碼的過程如下所示:
  arr[0] = 0;
  arr[1] = 1;
  arr[2] = 2;
  arr[3] = 3;
  
  這個過程可以通過使用Java 2 SDK中附帶的javap工具把二進制代碼反編譯成類文件去看(使用-c選項)。也許你會詫異于看到的內容,非凡當你希望看到的是一排排二進制常數時。有兩種方法可以讓你看不到反編譯的程序代碼,(1)把數據編碼為字符串,運行時解碼之,或者(2)把數據存為二進制文件并與程序打包,用類裝載器的getResourceAsStream方法在運行時存取之。
  
  以上只是一些指導性的方法,對每個J2ME程序而言,這里沒有具體到步驟。但是多數方法可以應用的本例。優化后的MIDlet如下所示:
  
  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();
  }
  }
  }

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲娇小xxxx欧美娇小| 96sao精品视频在线观看| 中日韩午夜理伦电影免费| 亚洲精品一区二区三区不| 亚洲www在线观看| 岛国视频午夜一区免费在线观看| 亚洲国产精品视频在线观看| 亚洲成人av资源网| 亚洲视频免费一区| 狠狠躁夜夜躁人人爽超碰91| 8x海外华人永久免费日韩内陆视频| 精品无人区乱码1区2区3区在线| 亚洲精品国产成人| 中文字幕av一区| 777午夜精品福利在线观看| 久热爱精品视频线路一| 日韩中文字幕视频| 日韩av在线网址| 日韩在线免费视频观看| 欧美午夜影院在线视频| 国产精品亚洲综合天堂夜夜| 国产精品免费看久久久香蕉| 亚洲国产又黄又爽女人高潮的| xvideos亚洲| 免费97视频在线精品国自产拍| 欧美成人自拍视频| 国产精品久久电影观看| 欧美第一淫aaasss性| 91亚洲永久免费精品| 亚洲码在线观看| 欧洲永久精品大片ww免费漫画| 欧美日产国产成人免费图片| 亚洲第一av网站| 欧美国产日韩一区| 中文字幕少妇一区二区三区| 国产成人精品日本亚洲| 欧美日本高清视频| 精品一区精品二区| 久久精品电影网站| 亚洲第一精品夜夜躁人人爽| 亚洲一区二区三区在线视频| 国产婷婷色综合av蜜臀av| 欧美日韩亚洲一区二区三区| 精品亚洲一区二区| 亚洲视频自拍偷拍| 欧美精品videosex极品1| 亚洲香蕉在线观看| 色悠悠久久久久| 中文字幕久久精品| 久久精品视频网站| 51ⅴ精品国产91久久久久久| 成人免费高清完整版在线观看| 国产精品一区二区三区免费视频| 亚洲国产精品国自产拍av秋霞| 欧美视频在线观看免费网址| 国产aaa精品| 色99之美女主播在线视频| 精品一区二区三区电影| 色婷婷综合久久久久中文字幕1| 欧美日韩福利在线观看| 久久av.com| 一区国产精品视频| 亚洲男人av在线| 精品偷拍各种wc美女嘘嘘| 久久久久久久久久久人体| 精品久久久久久| 国产精品视频久| 97精品国产97久久久久久免费| 欧美成人免费小视频| 国产97在线|日韩| 97**国产露脸精品国产| 国产精品69av| 欧美日韩一区二区三区| 亚洲区bt下载| 亚洲人成毛片在线播放| 国产在线视频不卡| 情事1991在线| 91久久精品一区| 日韩电影免费观看在线观看| 亚洲一区美女视频在线观看免费| 日韩美女福利视频| 日韩视频在线一区| 欧美日韩国产成人在线| 在线看欧美日韩| 日韩在线观看精品| 国产亚洲视频中文字幕视频| 成人日韩在线电影| 久久影院资源网| 成人国产在线激情| 久久99久久久久久久噜噜| 91成人福利在线| 久久99青青精品免费观看| 亚洲精品美女在线观看播放| 日韩免费在线视频| 亚洲第一福利网站| 爽爽爽爽爽爽爽成人免费观看| 亚洲欧洲黄色网| 亚洲尤物视频网| 精品少妇v888av| 亚洲第一综合天堂另类专| 国产精品视频资源| 精品亚洲一区二区三区在线播放| 亚洲国产女人aaa毛片在线| 欧美大学生性色视频| 人人做人人澡人人爽欧美| 欧美日本中文字幕| 日韩中文字幕欧美| 久久影视电视剧免费网站清宫辞电视| 亚洲级视频在线观看免费1级| 国产亚洲日本欧美韩国| 久久精品中文字幕一区| 日韩电影中文 亚洲精品乱码| 欧美日韩国产成人高清视频| 日韩在线视频网| 日本精品免费一区二区三区| 亚洲大胆人体在线| 精品亚洲一区二区三区| 久久久久北条麻妃免费看| 欧美日韩国产丝袜另类| 国产91精品在线播放| 北条麻妃在线一区二区| 自拍偷拍免费精品| 国产精品一区二区久久| 九九热最新视频//这里只有精品| xvideos亚洲人网站| 国产精品亚洲片夜色在线| 亚洲综合日韩中文字幕v在线| 精品美女久久久久久免费| 成人久久一区二区三区| 国产精品久久久久久超碰| 久久视频在线看| 色多多国产成人永久免费网站| 成人激情电影一区二区| www.亚洲免费视频| 日韩精品欧美国产精品忘忧草| 欧美精品免费在线| 亚洲一品av免费观看| 欧美人成在线视频| 国产精品99久久久久久久久| 成人97在线观看视频| 国产精品对白刺激| 91久久精品久久国产性色也91| 国产欧美日韩精品丝袜高跟鞋| 国产亚洲日本欧美韩国| 久久中国妇女中文字幕| 久久久久久久久久婷婷| 久久免费福利视频| 一级做a爰片久久毛片美女图片| 欧美高清视频免费观看| 亚洲欧美日韩久久久久久| 久久久久久成人| 精品久久久久久久久久久久久久| 精品亚洲精品福利线在观看| 国产精品高潮在线| 日韩高清不卡av| 精品露脸国产偷人在视频| 欧美激情免费看| 黑人巨大精品欧美一区免费视频| 国产激情综合五月久久| 午夜精品视频网站| 日本午夜精品理论片a级appf发布| 成人精品视频久久久久| 国产精品一久久香蕉国产线看观看| 亚洲综合色av|