快速业务通道

优化J2ME程序大小 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-21

优化J2ME程序大小

时间:2011-01-07

要把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 ); } }

优化J2ME程序大小(2)

时间:2011-01-07

虽然这个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方法的参变量来区分它们。

内部类也可使代码过大,因为编译器必须生成特殊的变量和方法,以便内部类可以访问包含它们的类的私有内容。请参考内部类的规范以获取更多信息。

第三步,尽量使用现有的

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号