JSPCN主页 | JSP空间 | 网站制作 | JSP下载 | JSP论坛 | JSP教程 | 关于JSPCN | 联系我们
JSP虚拟主机,jsp空间,java空间,java虚拟空间,详细请点击进入
做最专业的JSP中文网站 当前位置首页--JSP技术--时间相关  
文章搜索:
关键字 标题
  
JSP中文网内容管理系统(JCMS)
JSP虚拟主机
网络笔记本
网摘,图片,笔记收藏
虚拟服务器

JSPCN文章目录分类
JSP配置[219]JSP基础[136]
中文问题[69]上传问题[27]
JAVABEAN[46]数据库[212]
文件操作[126]图片声音[17]
JSP其他[57]时间相关[16]
JAVAMAIL[72]STRUTS[144]
开发工具[28]教程系列[157]
JSP实例[89]
JAVA基础[421]APPLET[78]
JAVA网络[179]Applica[115]
Servlet[98]XML[163]
J2ME[257]J2EE[374]
考试相关[63]JAVA线程[90]
EJB[261]Swing[26]
Java API[141]声音图片[28]
异常处理[33]JAVA实例[290]
JAVA类[139]SUN[89]
Hibernate[6]JMX[8]
Spring[34]
本版推荐文章 
本版热点文章 
相关文章链接 
 
移动设备最优化(直逼网络j2me的应用性能和开发时间)一
作者:     文章来源:
访问次数:194次     加入时间:2006年05月19日
移动设备最优化
直逼网络j2me的应用性能和开发时间
************************************
如果你需要提高你的移动设备的性能,这不仅只是学习如何去写一个j2me的应用然后让他和数据库
或者其他什么系统进行通讯,但是如何去让你的开发达到最优化,你一定会说我可以使用上层设计模式
他将会使我的移动设备达到最优化,另外,我们将会向你介绍midp2.0的一项新技术:特定的sms消息
和他和未来的移动设备之间的关系。

蜂窝电话商业领域正处在一个非常危险的时期,如果继续只使用最后的技术,而不去发展新的技术的话。
在本文中,我将更新移动设备开发人员的思想,告诉你们,什么是普遍的可用的技术。当然,这也包含了
一些在比赛中被发现的新技术以及如何将他们整合到移动应用中的一些纲要。

在我们进入例程BagTracMobile之前,这是一个重要的简单的基本配置对于j2me的架构和j2me的开发工具包
以及可以应用到当前市场上的移动设备之上,在本文的结束资源部分,你可以找到一些站点链接,以便你
学习和掌握j2me,本文的读者范围是具有具有中等j2me知识,并且熟悉midlets,具有*.jad文件的开发经验
,知道怎么使用j2me开发工具包去测试或者调试应用开发。(如果对以上所说,你没有一点了解和概念,那么
你最好先去看其他文章,使你对一些背景知识有所了解之后再来阅读本文!)文末的资源清单对于初学者来说
将会是很完美的,可以使你学会如何开发midlets和一些基本j2me应用开发的概念,不管怎么说,我们将开始深入
到j2me和唯一被发行的针对与移动设备的设计模式了,呵呵!

开始:
大部分的j2me应用都会继承javax.microedition,midlet.MIDlet类,并且拥有三个绝对方法:destroApp(),pauseApp(),和
startApp(),如果这看起来很熟悉,也许是吧,这些设置和applet很相似,知识方法名不一样而已,把MIDlets当作运行在
移动设备上的applet,这将是我们学习的一条捷径。

不管怎么说,在startApp()方法被调用之前,还有一些重要的事情要做,首先得构造MIDlet,获得显示对象的实例化,
然后你可以使用任何你将要使用的命令对象,然后为你应用加载所需要的图片,代码如下所示:

public BagTracMobile()
{
display = Display.getDisplay(this);
exit = new Command("Exit", Command.EXIT, 1);
query = new Command("Trac", Command.SCREEN, 1);
back = new Command("Back", Command.BACK, 1);
enter = new Command("Enter", Command.SCREEN, 1);
try
{
saveImage = Image.createImage("/icon.png");
}
catch (IOException e) { e.printStackTrace(); }
}

现在我们可以有一个显示对象的实例可以应用在我们的MIDlet中了,我们将使用各种命令去调用他,我们可以开发我们将要
在应用中使用的显示部分了。

屏幕部分的开发:
屏幕流模型
在我们应用中所有的屏幕都将依据这个屏幕流模型,这个模型的基本前提是所有的界面知道如何去操作自身,怎样显示自身的数据,然后
怎样去完成自身的功能,他要能根据不同的需求创建不同的界面,如果在在中型工作站上运行的中级应用,我想可以不这样去做,但是现在。
我很明确的告诉你,不管怎样也要这么做,因为我们的移动电话只拥有有限的资源,有两点我们必须注意:
一、每一个类应用时产生最大值,你的每一个类都在创建构造方法,变量,方法。
二、每一个类使用的时候都是从内存中读取的。
这应当成为我们设计移动设备应用时引起重视的两点,空间和内存是移动设备世界最重要的,就像奶酪和冰淇淋一样,属于易耗品。你必须珍惜
你的程式的每一个字节,并且保证他们尽可能的快速响应,所以,这对于界面来说,意味着什么呢?,在一个其他应用中,用自己的方法构建自己的
界面,这是令人快乐的,在中型应用中用各自的类构建各自的屏幕,或者用大量的代码去构建所有的屏幕,另外,这个模型认为,这些移动设备上的


显示屏幕都很简捷,他们之间怎么去完成,由自身去做会更好一点,每一个屏幕都将变得很简洁,这将使屏幕代码编写的可控性增强。按照这样的思路,
我们另外还有一个技巧:当你使用do时,不要采用任何的get/set方法,只需要将每一个变量定义成public,这样你可以节省下大量的空间。

让我们看例子的开始屏幕:
就像我们见到的移动电话屏幕一样,他包含了很少的部分,而且更加已于编码。
// 创建一个form--这是你的基础,当你添加组件时
formStart = new Form("BagTrac");

// 在form上创建一个我们需要使用的虚拟组件
choiceGroup = new ChoiceGroup("Search Type", List.EXCLUSIVE);
choiceGroup.append("New", null);
choiceGroup.append("Saved", null);
formStart.append(choiceGroup);

// 现在我们为屏幕的动作添加按钮
// they're not really buttons but rather choices presented to the
// user on the phone display.
// These commands have been statically initialized in the constructor for
// faster execution and reuse
formStart.addCommand(command_exit);
formStart.addCommand(command_enter);
formStart.setCommandListener(this);

// finally, display the screen
display.setCurrent(formStart);

事件处理
继续屏幕流模型
在一个MIDLet开发中,所有的按钮事件都是通过public void commandAction()方法定义的,他必须拥有两个参数,命令对象,然后抛出这个
动作,然后显示对象从命令随想获得抛出的值,并且把它显示在屏幕上,通过这两点,我们可以处理几乎所有应用中的事件,我们熟悉屏幕,
而且我们知道按钮被按下去了,然后就立刻关联到相应的一系列的语句中去处理动作,这种处理使我们感到很熟悉,再说,他大概将要,就像我们
共享了java语言的事件模型一样,你记得住那些拥有很多 if/else 关系的 public boolean action()和public boolean handleEvent()方法吗?
不要担心,在这些应用中,开发会变得很丑陋,这里没有足够的屏幕和按钮去让你实现他。
屏幕模型允许我们去优化我们的事件处理,我们能使用知识然后和所有的移动设备应用将会用一个模型树去省下大量的编码。

测试这个树你将看到那种不管什么时候,当你按下“后退“按钮时,我们回到我们刚刚所在的那一屏幕,这只需要简单的保持我们刚才经过的那一屏幕
就可以了,这样我们至少可以排除掉一半以上的鉴定,最后,我们可以使用java.util.Stack然后简单的push()出屏幕就可以了,当我们向前的时候,
然后pop()屏幕当我们需要向后的时候,现在,只要“后退”按钮被按下,替换鉴定我们在哪一个屏幕,然后我们需要返回这样的一个过程,我们可以简单
的调用一些方法,就像你看到的一样:
if (command == command_back)
{
displayable = null;
display.setCurrent((Form)screenStack.pop());
}
当你重复这些操作的时候需要注意,因为我们知道每一个我们当前所在的屏幕,知道哪一个按钮被按下了,这些还只是关系到如何书写 if/else 这些关系。
要用心注意这些当你向前移动一个屏幕时,你需要向栈中添加一个当前屏幕。

else if (command == command_enter)
{
screenStack.push(displayable);
if (choiceGroup.getString
(choiceGroup.getSelectedIndex()).equals("New"))
screenNew();
else if (choiceGroup.getString
(choiceGroup.getSelectedIndex()).equals("Saved"))
screenSaved();
}

要完成更多更加复杂的屏幕流,也许最佳优化你的数据树结构,每一个屏幕相当于一个节点,每一个按钮都将引导到下个节点,使用最少的资源去保证这些
过程中的逻辑关系,在保证代码的可维护性的同时还需要保证代码的大小,虽然这个应用只有四个屏幕显示,但是一个大的应用也会有过长的代码,所以不要因为
应用小而否认这一点,一定要注意。
(未完待续)




Copyright © 2002-2005 JSPCN.net. All rights reserved.
JSP中文网    备案序号:蜀ICP备05001583号
成都恒海科技发展有限公司    成都市一环路南二段6号新瑞楼三楼8号