J2ME应用基础

自从1995年面世以来,已经大大超出了最初Applet应用范畴,在Java发布两年后Sun公司推出了主要针对于企业级应用的J2EE(Java 2 Enterprise Edition),而最近加入到Java产品家族的是J2ME(Java 2 Micro Edition),它的目标直指所谓的“信息设备”,包括电视机顶盒到移动电话的一系列产品。

Java版本


目前Java主要包括以下三种版本:

● 标准版(J2SE):运行在桌面电脑和工作站上;

● 企业版(J2EE):内置支持Servlets,JSP和XML,主要针对服务器端应用;

● 简化版(J2ME):针对那些具有有限存储、小显示以及有限处理能力的设备。

注释:1998年12月,Sun提出了"Java 2"(J2)这个名字来指Java 1.2 这个版本。现在这个名字已经应用到所有的Java版本中,包括标准版(J2SE),企业版(J2EE)和简化版(J2ME)。




图1 Java的不同版本


为什么使用J2ME?


J2ME主要针对那些具有有限处理能力的设备。许多这类设备(比如手机、传呼机等)原来并没有提供下载和安装软件的功能,但是随着J2ME的引入,这一切都得到了改变,J2ME使得这些设备具有了浏览,下载以及安装Java程序的功能。

这些小的消费类电子设备正悄悄地改变着我们的生活。而且,随着它们对Java的支持,你就可以使用Java语言的许多优秀特性,简单,跨平台,安全健壮,更不用说超过200万使用者的经验和信心啦。

尽管在这些小型设备上使用完整的J2SE API是令人兴奋的,但却是不现实的。想想看,手机的小屏幕是没办法让Java AWT(Abstract Window Toolkit)施展拳脚的。于是不同于J2SE和J2EE的Java简化版就产生了,这就是J2ME。

我们知道,J2ME应用的设备性能千差万别。一个因特网Screenphone(一种访问邮件,新闻,在线银行业务等的设备)拥有比一寻呼机大得多的显示屏。有时即使外形相当,性能也会有很大差异。一个移动电话和PDA同样在物理大小上被限制,然而一个典型移动电话支持12288像素(96 x128)显示,PDA却至少可以支持20000像素。

那J2ME是怎么能够支持这些设备的呢?

J2ME定义了两种类型的规范:配置(configurations)和子集(profiles),由它们来协同提供对各种设备的支持。

配置(Configurations)

一个Configuration定义了针对一系列设备的Java平台。Congiguration与Java 虚拟机(JVM)紧密联系。实际上,Configuration就是定义了Java的语言特性和JVM的核心类库。

不同的Configuration应用分类主要基于设备以下几个方面的考虑:内存,显示,网络连接和处理能力。

在Sun的J2ME FAQ中这样形象地定义:J2ME技术主要针对两种设备:你拿在手里的,你插到墙上的。确实如此,但这只是个很笼统的说法,实际应用过程中不要受此约束。

下面介绍两种典型的Configurations:

● 连接设备配置(CDC)

至少512KB内存运行Java;

至少256KB供运行时存储分配;

持续稳定和高带宽的网络连接(相对于CLDC来说)。

● 连结有限设备配置(CLDC)

128KB内存运行Java;

32KB供运行时存储分配;

受限制的用户接口;

能量有限,主要以电池提供能量;

网络连接可能是窄带宽、不稳定的,且以无线连接为主。

虽然这个划分似乎相当清楚,CDC针对机顶盒之类高端设备,而CLDC主要针对移动电话、PDA和传呼机等低端设备,但不必拘泥于此。随着技术的不断进步,两者之间的界限也越来越模糊。

● 子集(Profiles)

一个Configuration涵盖的设备很复杂,各种设备的性能也大不一样,可能对于某种设备来说的限制在其他设备看来就不是什么问题。前面我们提到移动电话和PDA都符合CLDC的要求,但是还记得开头部分我们对它们的显示性能做的对比吗?为了应付这些不同,Sun又提出了Profile这个概念。

如果说Configuration是从大的方面给这些设备分类的话,那么Profiles就是在特定的Configuration上再细分,是对Configuration的延伸和拓展。它提供给开发者在特定类型设备上开发的类库。比如说,移动信息设备子集MIDP(Mobile Information Device Profile)就是综合考虑了移动设备的屏幕和内存限制,定义了一些用户接口组件,输入和事件处理,存储,网络和计时方面的APIs。

Configurations和Profiles是如何被开发出来的?

J2ME FAQ(http://java.sun.com/j2me/faq.html)的节录:这些工作都是由JCP(Java Community Process)来完成的,更多信息请查看:http://jcp.org。

Java虚拟机


我们知道,任何Java程序都是在JVM中被执行的。那么对于J2ME来说,情况又是如何呢?CDC仍然使用与J2SE相同的JVM,对于CLDC,由于设备资源受到限制,Sun专门开发了一个新的名叫KVM(K Virtual Machine)的虚拟机。这是个不同于传统的Java虚拟机:

● 虚拟机本身仅仅需要40-80KB内存;

● 只需要20-40KB动态内存(堆);

● 能够运行在16位25MHz处理器上。

当然KVM只是一个由Sun实现的符合CLDC规范的Java虚拟机而已,它并不是唯一的,还存在很多类似的虚拟机,你也完全可以自己实现一个这样的虚拟机,只要它符合CLDC规范就可以。

KVM和CLDC是如何联系在一起的?

摘自Sun的文档:“CLDC是对能运行在由它和相关profiles界定的设备上的Java虚拟机的规格说明”,言下之意就是虚拟机必须满足CLDC规范要求。KVM即是其中一个。

J2ME整体架构


前面我们大致地了解啦一下J2ME的各个方面,现在让我们从整体上来看看J2ME。

通用J2ME架构



图2 通用J2ME架构


MIDP架构

在这个通用架构基础之上,我们可以衍生出不同的应用类型,现在比较流行的就是MIDP架构。



图3 MIDP架构


Java版本间兼容性


Java有句名言:“编写一次,随处运行”(Write Once,Run Anywhere),也有人戏称为"Write Once,Debug Anywhere",那我们想问问:对于J2ME来说,这依然成立吗?答案是在某种程度上是对的。

J2SE应用能在J2ME上运行吗?

J2ME基本上可以算作J2SE的一个简化版本,J2SE中的很多功能J2ME并没有提供,所有说只有当你编写的J2SE程序只采用J2ME中有的类并且严格遵守J2ME规范,它才可能在J2ME上运行,不过那样的程序是毫无意义的。

J2ME应用能在J2SE上运行吗?

和上面同理,只要你的J2ME程序只采用两个平台共同具有的特性,就可以正常运行。但是要知道,J2ME应用中的大部分都是针对特定设备的应用接口和事件处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值