BlackBerryJDE450初级向导中文版Word格式.docx
《BlackBerryJDE450初级向导中文版Word格式.docx》由会员分享,可在线阅读,更多相关《BlackBerryJDE450初级向导中文版Word格式.docx(31页珍藏版)》请在冰豆网上搜索。
IT策略和microSD介质卡22
(八)测试BlackBerryJava程序23
BlackBerrySmartphone模拟器r23
BlackBerryMDS模拟器23
BlackBerryEmail模拟器24
(九)发布程序25
(十)Glossary(词汇表就不翻译了。
)26
AES26
AdvancedEncryptionStandard26
(一)理解BlackBerry并为BlackBerry设备编程
BlackBerry设备提供了一个J2ME无线环境,它可以支持客户端和服务器端应用程序。
程序开发者可以创建一个拥有复杂数据入口的UI和搜索的BlackBerry程序,它可以拥有多线程支持,通用的,网络通信和本地数据存储。
程序可以通过网络使用标准TCP和HTTP连接和网络通信,而不用考虑下层的网络。
也可以创建一个紧紧联系着BlackBerry设备核心应用的程序,像消息列表,组织者应用,电话,浏览器,作基本的无缝用户体验
A.BlackBerry设备设计原则
程序应该在良好的用户体验和耗电量之间找到一个平衡。
当你在设计你的BlackBerry设备程序时,应该考虑不同的移动设备和电脑之间的差异。
移动设备:
•只有很小的屏幕,只能显示有限的字符
•处理器速度更慢
•使用的无线网络比LAN有更长的延迟
•内存有限
•电池寿命有限
•同一时刻只能显示一个屏
移动设备使用者在他们的移动设备上运行程序不同于在电脑的运行程序。
用户希望迅速找到他们要的信息。
例如,一个CRM(客户关系管理系统)可以提供大量的信息,但用户在某一时刻只希望看到少部分信息。
BlackBerrydeviceUI应该设计成用户能够轻易完成任务、快速的访问所需信息。
当你设计一个BlackBerry程序时,要尽可能的和其他BlackBerry保持兼容。
考虑以下建议
•使用或扩充已有的UI组件可能让你的程序继承这些组件的默认行为
•尽可能的随着标准导航模式,这样用户才能更好的使用键盘和轨迹球.
•让菜单里所有的动作都可用.检查这些菜单里可用的动作和用户现有有行为相关性.
当设计你的程序时,也要考虑以下的建议:
•注意用户的即时任务.任何时候都应该只显示选择和表达的线性数据流.
B.发行周期和版本
所有的黑莓设备都包括一个特殊的版本黑莓软件版本和BlackBerryJVM。
在BlackBerry手机的选项,点关于,可以确定你黑莓手机所使用的软件版本
你可以升级黑莓OS。
比如你可以把OS版本从4.0升级到4.1
对于主要的BlackBerryOS和JVM都有相应的JAVAAPIs和相应的blackberryJDE
BlackBerryOS的版本决定了你应用程序能够使用的blackberryJDE版本
例如,RIM同时发行了blackberryOS4.0和blackberryJDE
BlackBerryJDEversion4.0所支持的API将会在黑莓设备软件4.0版本和4.0的黑莓JVM版本有所说明
你可以在4.0版本OS的黑莓设备软运行基于BlackBerryJDEversion4.0开发的应用程序
你可以根据以下几点来确定你要使用哪个版本的JDE来开发应用--------
•如果你的应用程序不需要使用特殊的黑莓硬件和较新的API扩展,可以使用JDE4.0进行开发
•如果你的应用程序是为BlackBerry®
Pearl™8100设计的,使用JDE4.2
C.BlackBerryJDE
JDE是一个完整的为创建BlackBerryJAVA程序而构建模拟开发环境,有了这个JDE,开发者可以使用J2ME和BlackBerry的扩展API进行开发.
BlackBerryJavaJDE包括下边几个开发工具:
•完整的BlackBerry开发环境
•BlackBerrySmartphone模拟器
•JavaMEAPIs和BlackBerryAPIs
•程序示例
BlackBerryIDE包含的可编辑和调试工具为BlackBerryJAVA应用程序而优化,BlackBerry手机模拟器提供了一个完整的窗口界面,它被用来模拟BlackBerry手机界面与用户交互,网络连接,Email服务,和无线数据数据同步。
D.JavaMEandJavaAPIsforBlackBerry
Java®
ME是为不同的无线设备和嵌入式设备所定义的一个通用的JAVAAPI集的工业标准平台。
一个j2me程序在BlackBerry设备的JAVA虚拟机上运行,它提供所有程序运行时服务和执行功能,如典型的内存分配,安装检查和垃圾收集。
JavaMEMIDP不会忽略约束的API和JVM无线设备用户接口要求。
BlackBerry设备支持JSR118所定义的。
标准J2MEMIDP提供了一个所有BlackBerry都支持JAVAAPI核心集,而不用理会底层的系统操作。
开发都可以构建一个基于标准MIDPAPI的程序,它可以运行在许多不同类型的设备。
标准JavaAPI支持
BlackBerry设备和BlackBerryJDE支持标准J2MEMIDP,它提供了一个用来开发无线设备程序的JAVAAPI核心集。
BlackBerry设备支持以下JSR:
•JSR185:
JavaTechnologyfortheWirelessIndustry(JTWI)
•JSR139:
ConnectedLimitedDeviceConfigurationVersion1.1
•JSR118:
MobileInformationDeviceProfileVersion2.0
•JSR120:
WirelessMessagingAPI(WMA)Version1.1
•JSR135:
MobileMediaAPIs(MMAPI)Version1.1
•JSR179:
LocationAPIforJavaME
•JSR75:
PortableOptionalPackagesfortheJ2MEPlatform(PDAP)supportforthePIMAPIsonly,FileConnectionAPI
forJavaME(supportedondeviceswithBlackBerryDeviceSoftwareVersion4.2orlater)
•JSR82:
JavaAPIsforBluetooth®
FundamentalsGuideUnderstandingBlackBerryandprogrammingforBlackBerrydevices
7•JSR172:
J2MEWebServices
•JSR177:
SecurityandTrustServicesAPIforJ2ME(SATSA)
•JSR205:
WirelessMessagingAPI2.0
•JSR211:
ContentHandlerAPI
•JSR238:
MobileInternationalizationAPI
•JSR30:
(CLDCVersion1.0),supportedondeviceswithBlackBerry®
DeviceSoftwareVersion4.0orearlier
•JSR37:
(MIDPVersion1.0),supportedondeviceswithBlackBerryDeviceSoftwareVersion4.0orearlier
JavaAPI扩展支持
BlackBerry设备支持以下的那些未被标准JSR定义的JAVAAPI,它能够提供比标准MIDPAPI上的更
多的特色和更丰富的功能。
你可以用这些API创建屏幕,菜单元素等所有的用户接口组件
PersistentDataStorageAPIs
你可以使用这些API在你的程序中本地存储用户数据
NetworkingandI/OAPIs
你可以使用这些API来建立网络连接和读写服务器端程序数据
EventListeners
你可以在BlackBerry设备上使用事件监听顺来响应BlackBerry用户或系统初始事件
ApplicationIntegrationAPIs
你可以用这些API来事例已经存在的BlackBerryEmail,电话,日历,联系人,浏览器,摄像头,媒体播放器和任务列表程序。
AdditionalUtilities
你可以使用这些附加的API来做数据加密和压缩,解析XML,连接蓝牙,位置服务等等
E.BlackBerrysolutions
BlackBerry设备用户可以使用BES或BIS或者两个一起使用.理解BES和BIS之间的差异和用户想你支持的类型是很重要的.它可能影响传输模式的和怎样管理数据同步.
黑莓企业解决方案
黑莓企业服务器是黑莓企业解决的一部分,它在公司的防火墙后边,为黑莓设备提供一个无线网关并在一个组织内访问公司邮件和组织者数据。
黑莓企业服务器也提供以下关键特征
•数据加密和压缩
•BlackBerry设备管理和有效的监控
•简化的程序响应
•从一个黑莓应用程序鉴别网络访问网关
黑莓因特网服务
BlackBerry设备用户可以不用连接BES就使用BIS。
BIS是设计为用户提供自动的邮件消息分必,无线访问邮件附件,和访问Internet网内容的邮件和Internet服务。
BIS支持包括从第三方黑张程序直接通过HTTP和TCP/IP连接Internet。
BlackBerryMDS
为了允许BlackBerry程序访问公司防火墙后的资源,BES包括黑莓移动数据系统(BlackBerryMDS)。
移动数据系统可以为黑莓程序提供HTTP和TCP/IP代理,它允许在没有另外的VPN软件情况下通过公司防火墙和后边黑莓设备和应用程序、WEB服务器通信。
程序使用BES做为网关发送数据,独立地利用简化的企业连接,数据加密和压缩,无线网络等黑莓企业解决方案提供的东西。
MDS提供一个开放的接口,允许在公司防火墙后的服务器端程序推送内容到黑莓设备
(二)BlackBerryJava程序设计
a)独立程序
你可以使用BlackBerryAPI创建独立的程序程序,例如可以离线运行的游戏,静态参考向导。
你可以在编译之前添加必须的资源数据到一个程序中。
用户可以通过无线网络或桌面软件安装它。
当安装完成后,这个程序不需要再连接到网络或桌面电脑
b)程序和桌面同步
你可以使用BlackBerryAPI构建一个有桌面同步的程序,如参考向导,组织者程序。
用户连接BlackBerry设备到电脑管理和同步本地电脑上的数据
RIM不提供管道同步和其他直接数据库同步模块。
你必须创建同步代码,用户必须手动初始化数据同步进程。
当程序安装到BlackBerry设备后,用户必须通过由串口(USB,蓝牙连接)和电脑连接的Blackberry设备手动同步信息
c)带无线访问、无线同步、无线提醒的程序
你可以使用BlackBerryAPI创建可以通过无线网络主动推送内容到使用BES的BlackBerry设备的程序。
一个BlackBerry程序使用无线连接到Internet或公司的内部互联网来访问远程数据和应用程序。
你可以在程序中使用BlackBerryJDE提供的API建立同Internet或公司内部网的网络连接
d)MIDlet程序
MIDlet程序模型是MIDP规范的一部分。
Main类问题从MIDlet类继承而来,它必须实现startApp(),pauseApp(),和destroyApp()方法。
优势和劣势:
•程序和其他也支持MIDP规范的设备兼容(优势)
•程序只能使用那些存在于javax.microedition.lcdui库中的userinterfaceAPIs
•当程序关闭的时模型呈现的所有进程必须结束
•程序不能在开机的时候自动在后台启动
e)CLDC应用程序
CLDC程序是J2ME框架的一个规范。
CLDC程序从标准main方法开始扩展了UIApplication类。
大多数包含BlackBerryJDE的示例程序使用了CLDC模型。
所有的BlackBerry核心应用程序(包括消息列表,联系人列表,日历,浏览器)做为CLDC一样构建。
•BlackBerryUserInterfaceAPI可比标准javax.microedition.lcdui库提具有更多的功能性和灵活性
•程序可以在它们关闭后在激活后台线程运行
•程序可以在开机的时候自动在后台启动
•程序可能使用IPCAPIs同其他程序交互to
•用户可以创建CLDC可以导入的重用的库模块
•程序不能移植到其他设备
f)API控制和代码签名
当你为BlackBerry设备开发一个BlackBerryJAVA程序时,你只能使用已经被公开的公共JAVAAPI和BlackBerryJDE文件中列出的API。
BlackBerry设备上BlackBerryJVM是被设计来保护底层数据和OS的,所以程序不能调用非正式的、或不被支持的API,也不能访问未被明确公开API。
当你使用这些未被明确暴露的API,当程序运行时会收到错误提示。
公共API是被公开的和被签名的。
已被签名的公共API访问BlackBerry设备上的用户数据或BlackBerry设备上的其他信息是很敏感的。
你可以使用这些已经签名的API,但你必须向RIM请求一个代码签名密匙集。
然后你必须在你安装这个程序到BlackBerry设备前数字签名你的程序。
代码签名并不能保证或通过一个程序。
当程序是恶意的时候,它允许RIM识别使用敏感API程序的作者,你可以访问请求签名,然后十天之内可以收到代码签名密匙。
g)Objectmodeling(对象建模)
无论你是使用MIDlet或是CLDC程序模型,你都必须使用面向对象的方法。
在一个面向对象的的方法里边,开发者使用的对象包括一些通用的特定功能和处理代码。
例如,当你用一个好的面向对象模型设计你的程序时,你可能使用单独的对象去控制网络活动,数据存储,数据处理、操作和用户界面交互。
h)多线程
BlackBerryOS是一个多线程OS,它意味着许多程序和进程可以在BlackBerry设备上同时运行。
例如,程序可能在后台线程管理密集形任务或网络通信,而不影响主线程。
如果一个程序创建了一个后台进程,用户关闭了程序,后台线程仍然在活动
练习:
多线程
要有有效的使用BlackBerryOS多线程能力,特别是在使用网络连接和其他较费时的操作时(多于十分之一秒)创建时。
当程序启动时,为监听器和其他运行在后台的进程创建使用多线程
编写高效的代码
为了允许BlackBerry程序高效的使用资源,请考虑以下建议:
•使用局部变量.
•使用简略(shorthand)判断布尔情况
•让类不可继承Makeclassesfinal.
•使用int而不使用long
•避免垃圾收集.
•为字符使用静态变量.
•避免使用String构造器
•编写高效的循环.
•优化子表达式.
•优化除法运算
•避开java.util.Enumeration.
•使用instanceof.执行计算(Performcastsusinginstanceof)
•用instanceof.评估备件(Evaluateconditionsusinginstanceof.)
•避开StringBuffer.append(StringBuffer).
•避免返回null.
•避免传递null到方法中
•当传递null到结构时要谨慎
•使用唯一识别符(Uselongforuniqueidentifiers.)
•正确的退出程序
•打印堆栈跟踪
使用局部变量
尽可能地使用局部变量,使用局部量变量访问类成员更有高效
使用简略来判断布尔情况
使用简单判断布尔情况,可以让编译的代码更短。
代码示例:
return(boolean_expression);
使用最终类(不可继承类)Makingclassesfinal
当你创建代码库时,如果你永远不想让开发者扩展类的时候为它做上final标记,有final关键词的允许编译器生产出更高效的代码。
默认情况下,BlackBerryJDE编译器会给那些在程序中没有被扩展的类加上final标记
使用int而不使用long
在Java里边,一个long型数据是一个64位整数,因为BlackBerry设备使用32们处理器,当你使用long的时候操作只能在2到4次操作内完成
避免垃圾收集
不要调用System.gc()进行垃圾收集操作,因为在BlackBerry设备有限的内存上可能浪费较多的时间,让BlackBerry去收集垃圾
为字符使用静态变量
当你给字符定义静态域时,因为你使用一静态变量而不是常量,你可以增快程序运行速度。
与此相反的是原始数据类型,比如int。
一个例子,你可按下边一样创建了个字符对象:
privatestaticfinalStringx="
example"
;
对于这个常量(由final关键词修饰),每当你使用这个常量的时候都会创建一个临时字符接口。
编译器将在二进1制2帛编码中除去“x”用“example”代替,所以BlackberryJVM在你每次提到'
x时都会产生多余无用信息方便查找。
相应的,一个静态变量的字符只被创建一次.只有在JVM初始化'
x'
时会产生无用信息,所以访问速度更快
privatestaticStringx="
你可以使用公共有常量(final域)但你必须把这些变量标记为私有(private)
避免使用String(String)构造器
在BlackBerry®
Java程序中,每一个被引用的字符都是java.lang.String类的一个实例.创建一个没有没有使用java.lang.String(String)构造器的String,
代码示例
Stringstr="
abc"
found"
+n+"
items"
编写高效的循环
如果你的容器包含多个元素,给局部变量分配内存大小ifyourcontainerislikelytocontainmorethanoneelement,assignthesizetoalocalvariable.
如果你遍历元素的顺序不是很重要,你可以反向遍历来避免其他的堆栈中的局部变量让比较更快。
intsize=vector.size();
for(inti=0;
i<
size;
++i){
...
}
for(inti=vector.size()-1;
i>
=0;
--i){
优化子表达式
如果你两次使用相同的表达式,请使用一个局部变量。
.
代码示例
inttmp=i+1;
one(tmp);
two(tmp);
优化除法运算
除运算会很很慢,因为BlackBerry设备处理器没有硬件除法指令。
当您的代码是正数除以2的时候,使用右移1位(>
>
1)。
仅当您知道你是在处理一个正数的时候使用右移1位(>
int=width>
1;
避开java.util.Enumeration
避免使用java.util.Enumeration对象除非你想隐蔽数据(换句话说,你想返回一个枚送举数据而不是数据本身)。
为玫举型对象请求一个向量或是哈希表会时,如果另一个线程更改向量或是同步遍历时,会很慢还会创建一些不必要的垃圾。
J2SE为相似的操作使用一个迭代对象,但迭代对象在J2ME中不可用。
for(inti=v.size()-1;
=0;
o=v.elementAt(i);
...
synchronized(v){
Performingcastsusinginstanceof
Useinstanceoftoevaluatewhetheracastsucceeds.
i)代码示例
if(xinstanceofString){
(String)x.whatever();
}else{
x
使用instanceof判断条件
为了产生出更小更快的代码,可以判断一个条件