J2ME也是JAVA,所以《think in java》就是不二法门了(幸亏偶已经拜读过了)。
J2ME中的虚拟机VM和J2SE,J2EE不一样di,在J2SE ,J2EE 之中,是Classic VM和HotSpot VM,而J2ME中是KVM和CVM,KVM(K virtual machine)执行低级硬件程序,而CVM(C virtual machine)执行高级硬件程序。还有个SMART CARD,呵呵,慢慢来吧。(其实不知道为什么sun这样命名,c,k什么意思啊)
什么是JINI,我一直久仰大名,原来他是将J2EE,J2SE,J2ME不同版本的java程序连接在一起的东东,好东东啊。。。
What’s? CLDC & CDC? Connected Limited Device Configuration(CLDC);Connected Device Configuration(CDC);CLDC包含于CDC,呵呵,就是一个连接配置
MIDP?这个东西看着很很很很重要,是什么东东?Mobile Information Device Profile,是CLDC的两种配置之一,另一个是PDAProfile,是针对PDA的配置,现在流行MIDP了,还是2.0了,因为是我们编写手机游戏少不了的,是我们开发游戏的设备配置标准。
MIDlet 也会看到,其实就是MIDP应用程序 MIDP application.。
我们先来看看MIDP的硬件标准
MIDP:
RAM和ROM: 至少要512K
电源:通常是使用电池,所以电源有限
网络连接能力:具有低频宽的无线通讯能力
要有额外的RAM或ROM 供应程序执行并存储资料
我们就来好好看看MIDP吧。(找到一份NOKIA的MIDP2.0英文资料)
MIDP的限制:
MIDP就是为手机这类移动设备设定的标准,所以限制少不了了。
1.CLDC1.0不支持浮点运算,如float和double,如果要用到浮点运算,只可以存为string或者integer数组
2.MIDP中没有设计class loader,需要手动加载类
3.不存在回收Finalization,对象必须手动在删除前释放
4.不存在 Java Native Interface (JNI),不过没什么意思,因为J2ME的代码一般都不会和J2SE,J2EE代码打交道
5.不支持映射 Reflection,也不支持RMI和对象的序列化object serialization。
6.错误处理很浪费资源,所以在J2ME中只存在3个错误类:java.lang.Error,
java.lang.OutOfMemoryError, java.lang.VirtualMachineError.
7.SWING AWT这样的大型界面很笨重,所以MIDP提供了专门的高层用户界面High-level user interfaces
8.没有提供设备文件系统的持续型文件的读写接口,而使用the Record Management System (RMS)代替。
9.MIDP支持多线程,但是不支持线程组Thread group和守护线程 daemon thread,可以在应用层使用集合存储线程对象来代替线程组。
MIDP可以实现的功能:
1. MIDP的核心java类库由两个部分组成,一部分是从J2SE,一部分是为J2ME单独设计的。
在类库中,除了object外,java.lang中Class,Runnable,String,System,Thread,Throwable,负责运算的math中的abs,min,max,数据类型除了浮点运算的数据类型,java.util中的Stack,Vector,Hashtable,,Random,Enumeration(没有保留Iterator),java.io中的大部分都可以在J2ME中找到。
2. MIDP有一个特殊的Display对象,用来控制输入设备和显示设备的连接,Display对象同一时间只允许一个。Displayable是一个提供所有用户可视界面的容器,有两个子类,Canvas和Screen。Canvas控制象素显示和低层次接口特性,Screen提供象选择菜单和数据表单等高层次接口特性。
3. 高层用户接口High-level user interfaces
Form是继承了Screen类,放置界面的容器,其实大家用过Swing就知道是什么东西了吧,Form似乎是从delphi借鉴过来的名字。界面组件有:?ChoiceGroup,?TextField, ?DateField, ?Gauge, Image,MIDP2.0新增加了Spacer, StringItem, CustomItem等等,顾名思义的东东,大家自己看看帮助文档就ok了。
4. 画布Canvas
用以控制底层来显示游戏中的移动和动态的图像,可以与Screen互换。Canvas类必须继承调用,他提供了一个paint()方法用来绘制或刷新,而且提供了其他很多方法来绘制图形,文本等,支持png格式的图像。
游戏开发的时候会发现一个改进的GameCanvas类,从Canvas继承而来,提供了很多开发游戏时有用的方法。
5. 新的游戏API javax.microedition.lcdui.game.
MDIP2.0的新游戏API中提供了象Sprites这样的Tiled backgrounds游戏中经常用到的方法。Sprite layerl 是游戏中的表层,用于完成图片的动画,而Tilelayer则可以提供游戏的背景层。这些都是由层管理器LayerManage完成,而且这种机制可以实现新层的重绘而旧层变暗的效果。
另外,GameCanvas提供了一个加快速度和实现无闪烁动画的缓冲,FlushGraphics()方法用来将缓冲中的图像拷贝到屏幕,hoho,这样就可以实现双缓冲的无闪烁而不用自己动手写了。
getKeyStates()方法也是新加的,用来判断设备按键,好像可以判断组合键了,又是一福,我们可以做组合大绝招了。
6. RGB图像
public void drawRGB(int[] rgbData, int offset, int scanlength, int x,
int y, int width, int height, boolean processAlpha)
MDIP2.0支持用户将图像以整数数组形式存取,这样就用这个方法来在象素级别进行图
像变换了。
7. 响应Commands
所有的交互动作都离不开Commands拉,一个按钮表示什么动作,如打开,关闭,退出。。。
给大家看一个代码就知道是什么了。
class myClass implements CommandListener {
public void commandAction(Command c, Displayable s) {
Forum.Noif (c == BACK_CMD) { … }
}
}
只不过在J2ME中,Command被抽象出来了
Command BACK_CMD = new Command("Back", Command.BACK, 1);
myScreen.addCommand(BACK_CMD);
8. MIDP 2.0 Media API 音效的API javax.microedition.media
仅仅支持声音,视频和图像都不可支持,一般就是.wav文件了,MIDP 2.0只是规范了对产生音质的的需求
9. MIDP2.0扩展了网络连接的方式,不仅再是HTTP,增加了secure HTTP (HTTPS),提倡支持User Datagram Protocol (UDP), 直接TCP连接,和串口通讯serial port communication.
CLDC特别提供了一个通用连接平台Generic Connection Framework (GCF), 他将所有外部的数据传输抽象为一个Connector类,例如要打开一个网页Connector.open(http://www.forum.nokia.com);
打开一个socket连接
Connector.open(socket://forum.nokia.com:9001);
10.进栈架构 Push architecture
其实就是栈结构,在战棋会合制游戏中很有用,不过还要看设备是否支持。
11.定时器和警报器 Timer&Alerts
Timer类运行为后台线程提供定时器功能,跟J2SE一样
Alert是一个特殊的Screen对象,可以显示文本和图像,并且自动在一段时间后中止。如果时间间隔设定为Forever,设备会自动提供一个方法消除Alert.Alert 一般用于显示错误信息。
12. 记录管理系统Record Management System (RMS)
这个前面提到过,他代替了IO系统中对永久型数据的文件系统来进行数据的读写,比如存取游戏存档,高分排行等。
MIDlets允许以不同文件名建立多个存储记录,并且可以在相同的套件中不同的MIDlets进行记录交换。如果外部条件允许,设置不同套件的MIDlets记录也可以实现交换。
13.终端对终端的安全协议HTTPS? End-to-end security — HTTPS
MIDP2.0除了提供了基于MIDlet层的安全保护,还额外的针对终端用户通过HTTPS (secure HTTP)进行加密通信。HTTPS用于如网络银行服务等领域,通过提供一个专用的HTTP安全通道来实现保护。一般在HTTP协议上使用Transport Layer Security (TLS)或Secure Sockets Layer (SSL) 技术来实现。.
14.托管MIDlet组件
一个标记后的MIDlet组件可以确保用户的MDIlet组件的内容没有被篡改并且MIDlet组件来源是合法或可以认证的。MIDP2.0实现了在设备上可以查证开发商的签名。
似乎这么直说有点绕口,其实就是指MIDP2.0提供了一套正版的验证机制。
我赛,好累,今天收获不小的说,不过很多东西还要慢慢理解,慢慢来了,每天有收获就是最大的收获。