欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

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

這篇文章主要講解了“如何優(yōu)化J2ME程序大小”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“如何優(yōu)化J2ME程序大小”吧!

專注于為中小企業(yè)提供成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)即墨免費做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了1000+企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

如果說j2me和j2se有什么大的區(qū)別,那就是他們運行環(huán)境的不同.J2ME最主要的限制就在于它可用來存儲數(shù)據(jù)和運行程序的內(nèi)存空間太小.當(dāng)前大多數(shù)支持MIDP的設(shè)備,都限制了應(yīng)用程序不得超于50K大小,這點兒就是千兆級的J2ME的服務(wù)運行環(huán)境大相徑庭.下面我們將學(xué)習(xí)一些技巧讓J2ME程序最小化 .下面就是一個最小化程序大小的例子:

 XML:namespace prefix = o ns = "urn:schemas-microsoft-com:Office:office" />

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在此僅作為一個例子,但使用的尺寸優(yōu)化技巧可以適用于任一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 Wireless Toolkit運行這個例子,程序的大小大約4K左右.

為了更好的說明該怎么做,我們列出縮小程序大小需要注意的事項:

1,  去掉不必要的類,保證程序結(jié)構(gòu)的簡潔 . 你有沒有考慮過,真的所有的特性都是你的程序所需要的么?你的用戶是否可以得到更簡潔的東西?考慮到這點,你的程序已經(jīng)為最小化做好了準(zhǔn)備.

2,  第二步就是深入考察程序定義的內(nèi)部類,特別是匿名類。記住,每個類文件都有一定量的與之相關(guān)的系統(tǒng)開銷。即便最普通的類也有系統(tǒng)開銷。

public class foo {

  // nothing here

  }

編譯這個Class所在類文件,你需要200 bytes大小,再加上這個類的一些常規(guī)方法的實現(xiàn),比如實現(xiàn)Event Listener接口等.而本身一個MIDlet就需要實現(xiàn)比如CommandListener, ItemStateListener接口, 如果可以的話,完全可以把他們用在一個文件中,多個類享受這一個commandAction , itemStateChanged ,不是很好么?雖然這需要你對程序的結(jié)構(gòu)組織非常清晰:)

  內(nèi)部類也某些方面也會消耗內(nèi)存空間 ,因為編譯器需要產(chǎn)生一些特殊的變量和方法來提供內(nèi)部類入口的私有信息.

3  盡量使用現(xiàn)有的類。例如,基于CLDC的profile沒有構(gòu)造集合類,所以我們可以用內(nèi)建的Hashtable和Vector類來實現(xiàn)之。構(gòu)造MIDP程序時也可采用此法。例子MIDlet中定義了一個form字類來生成主表,可以容易的如下直接生成:
   mainform = new form( "Mainform" );
   mainform.addCommand( okCommand );
   mainform.setCommandListener( listener );
這里沒有對與錯, 因為這是很容易理解的。

4,  破壞程序的繼承關(guān)系。你也許把相關(guān)的代碼放到一個或多個抽象類中,這是OOD中為提高程序間代碼重用的推薦做法。雖然破壞繼承關(guān)系與你所學(xué)知識相違背,但簡化的繼承關(guān)系更有意義。特別的,當(dāng)你的的抽象類――可能來自其他項目――僅僅被繼承一次時,破壞繼承關(guān)系的結(jié)果不言而喻。例如,例子MIDlet繼承了BasicMIDlet類,但兩者合并為一個類。

5,  盡量減少你創(chuàng)建的包,類,方法和成員變量的命名長度 . 這個聽起來似乎很無聊和愚蠢.不過一個類文件保存了許多的符號信息 簡短的命名將會使您簡化類文件 ,這個也許聽起來不是那么緊要,不過當(dāng)幾個類衍生開去的時候,你就明白它的功效了.包已經(jīng)有了一套成熟的簡化命名方式,盡量避免包的完整命名 ----- 在沒有和其他類沖突的情況下.

  另外,簡短命名的工作并不總是需要手動完成,您完全可以使用工具來幫您完成,

”混淆器” 就是一個不錯的選擇 .它的主要目的就是對命名的一個優(yōu)化(對你原有命名方式的一個隱藏和縮減).而這個過程大的效果就是收縮應(yīng)用程序的大小.這主要歸功于它對方法和數(shù)據(jù)變量的可讀性的重新命名(在編譯代碼中).

  記得在使用混淆器之前需要預(yù)審核(preverification) , 否則混淆器會使類文件中的預(yù)審核數(shù)據(jù)無效.

6,  數(shù)組的初始化方式 .一個數(shù)組的初始化聲明如下:

int arr[] = { 0, 1, 2, 3 };

而實際編譯代碼如下::

arr[0] = 0;

arr[1] = 1;

arr[2] = 2;

arr[3] = 3;

這個過程可以通過使用Java 2 SDK中附帶的javap工具把二進(jìn)制代碼反編譯成類文件去看(使用-c選項)。也許你會詫異于看到的內(nèi)容,特別當(dāng)你希望看到的是一排排二進(jìn)制常數(shù)時。有兩種方法可以讓你看不到反編譯的程序代碼,(1)把數(shù)據(jù)編碼為字符串,運行時解碼之,或者(2)把數(shù)據(jù)存為二進(jìn)制文件并與程序打包,用類裝載器的getResourceAsStream方法在運行時存取之。

  以上只是一個指導(dǎo)方針,對J2ME程序而言,這里并沒有提到所有的步驟,不過大多數(shù)方法都可以應(yīng)用到當(dāng)前例子.最優(yōu)化的MIDP例子如下:

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();
 }
 }
}

感謝各位的閱讀,以上就是“如何優(yōu)化J2ME程序大小”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對如何優(yōu)化J2ME程序大小這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

網(wǎng)站標(biāo)題:如何優(yōu)化J2ME程序大小-創(chuàng)新互聯(lián)
文章鏈接:http://aaarwkj.com/article42/dihehc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、企業(yè)網(wǎng)站制作、靜態(tài)網(wǎng)站、標(biāo)簽優(yōu)化、動態(tài)網(wǎng)站域名注冊

廣告

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

搜索引擎優(yōu)化
国产经典午夜福利在线| 综合激情网激情五月天| 亚洲欧美高清一区二区| 国产传媒免费在线播放| 午夜精品一区二区三区在线视频| 日本人妻系列中文字幕| 草嫩av一区二区三区| 人妻免费精品久久一区| 日韩人妻有码中文字幕| 精品国产91久久粉嫩| 91午夜福利视频鉴赏| 激情av一区二区不卡| 91在线免费观看国产精品| 激情国产白嫩美女在线观看| 国产专区亚洲精品欧美| 91亚洲国产成人精品性色| 成人免费大片在线观看视频| 91在线看片国产免费观看| 久久久久国产综合精品| 亚洲精品国产熟女高潮| 最新人妻少妇精品中文字幕视频| 免费国产三级在线观看| 日韩av一区二区久久久| 国产裸体无遮挡免费精品| 日本中文字幕区二区三区电影| 久国产精品一区国产精品| 成年网站在线91九色| 日本a级免费大片网站| 欧美日韩亚洲精品亚洲欧洲| 白白色手机视频免费看| 97资源视频在线播放| 国产女技师口爆在线观看| 国产麻豆剧传媒精品av| 精品一二三四五区亚洲乱码| 日韩 在线一区二区| 亚洲永久免费黄色av| 久久这里只有精品伊人网| 夜夜嗨av一区二区三区| 一本久久综合亚洲鲁鲁五月天| 日韩av一区二区人妻| 91大片在线观看视频|