|
要把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例子已经相当小了。
|