剖析Blackberry开发的问题
在中国做Blackberry要比在国外,例如美国难得多。这可苦了我们中国人呀。下面一一列出。
签名问题
不能不说这是RIM给社区的一个绊脚石。你用Blackberry Controlled API来开发,最后什么都开发好了。自己开开心心安装在Blackberry真机上并运行,系统冷不丁告诉你不能运行。唉。你还非得花上20美元去买(原来可是100美元哟).更气愤的是,你把信用卡什么信息都提交了,过了几天,人家回信说,哥们,你在中国,根据美国进出口法律什么,我们不能卖给你。郁闷。
关于签名,参看我的文章另外一篇文章关于BlackBerry的Code signing 问题
模拟器与真机
真的blackberry机器,呵呵,目前只有移动签约用户才是明媒正娶,否则就是水货啦。而且这些水货机器质量参差不齐。所以,拥有一台质量好的不简单。那么测试怎么办?没办法,就在模拟器上将就着用吧。你也说是模拟器啦,肯定很多功能在模拟器上不能使用的。很多功能只能在真机器上测试,而不能在模拟器上测试的。
BES/MDS
如果开发个企业级的应用,一般都会涉及到BES/MDS ,这是最令中国开发者头痛的事情。因为BES是没法去模拟器的。如果你开发了一个企业级的应用程序,我想一定要到真实的环境下去测试,这样无疑给测试带来极大挑战。我曾经就遇见这样的问题,因为一定要在BES下测试,请求了美国同事帮忙。令人痛苦的是,测试出现了一些问题,因为自己不在现场,以及沟通的难度,导致最后测试的时间变长了许多。幸好JDE提供MDS服务器,这样在一定程度上省了不少事情。
BES是Blackberry整个框架里的一个极其重要的部分,遗憾的是没法去模拟。
测试
测试问题,上面已经提到了,但是还是愿意单独拿出来说说。一般情况下,大家都会认为以下几点:
为什么和Windows Mobile不一样,不能在连接电脑的情况下上网
为什么有些功能在模拟器上没法测试
为什么有些功能在模拟器上运行正常,而在真机上不正常
为什么测试BES等变得这么麻烦
上面的问题都是由于Blackberry的特殊而导致的。
开发文档以及社区支持
明显,目前国内外的开发文档不多。国内恐怕也是以我的翻译的开发文档为主吧。我们也知道,要想使一种东西变得很好,没有社区的支持是不行的。遗憾的是同样没有好的社区支持,目前的社区都是讨论的都是Blackberry功能性问题,接触到开发以及BES的不多。
可以看看我写的这篇文章,关于Blackberry阻碍因素
可以继续参看我的文章:
BlackBerry 应用程序开发者指南
RIM,未来之路
RIM终于想通了-RIM开放新的API
BlackBerry的费用
BlackBerry的国际化与本地化
BlackBerry,你也真难为我们
从股价看RIM
Confach发表于 September 12, 2008 6:47 am | 留言(3) |开发
BlackBerry 应用程序开发者指南 第一卷:基础–第2章 编写BlackBerry Java应用程序
2
第2章 编写BlackBerry Java应用程序
应用程序管理
编写一个例程
重用一般代码
使用BlackBerry IDE
使用命令行
使用蓝牙开发环境
使用Eclipse开发环境
编程指南
应用程序管理
当BlackBerry设备启动时,VM加载应用程序管理器,它管理在BlackBerry设备上所有运行的程序。对于其他Java程序,应用程序管理器的功能类似操作系统事件的中心调度员一样。
提供用户界面的应用程序扩展了net.rim.device.api.ui.UiApplication类。这个类为应用程序提供方法来注册事件监听者,管理线程以及UI组件。
没有提供用户界面的应用程序扩展了net.rim.device.api.system.Application类。
BlackBerry应用程序开始于main()函数。当一个程序开始时,它的main()线程调用enterEventDispatcher()来开始处理事件。这个线程运行所有绘图以及事件处理的代码,以及登等待应用程序队列里地事件。
当应用程序管理器接收到一个事件时,它将这个事件拷贝到合适的队列里,这个队列可以允许应用程序管理器指挥消息到特定的程序中。例如,前台的应用程序仅接收用户输入的消息。
编写一个例程
扩展UiApplication基类
每个提供用户接口的应用程序扩展了UiApplication基类,UiApplication类为应用程序定义了方法来建立一个事件线程,并且显示和维护Screen对象。
定义 main()
在main()中,为应用程序创建一个新的对象。调用enterEventDispatcher()使应用程序进入事件线程并且开始处理消息。
public static void main(String[] args) {
HelloWorld theApp = new HelloWorld();
theApp.enterEventDispatcher();
}
定义一个构造子
为你的应用程序定义缺省的构造子。缺省的构造子调用UiApplication.pushScreen()以显示当应用程序启动时出现的屏幕。在本例中,屏幕使一个新的HelloWorldScreen实例,它在下节的代码中定义:
public HelloWorld() {
pushScreen(new HelloWorldScreen());
}
定义main屏幕
为了定义应用程序UI的主屏幕,扩展MainScreen类。MainScreen类是Screen的子类,它实现了TrackwheelListener和KeyboardListener接口,这些接口接收和响应用户交互。如果你扩展Screen类或者其子类中的一个,你并不是必须实现TrackwheelListener 和KeyboardListener接口。
你的类至少应该重写2个MainScreen的方法:缺省的构造子和onClose().
在这个例子中,构造子调用了MainScreen的构造子。缺省地,MainScreen提供下列特性:
由一个Close菜单项的缺省菜单。
当你点击Close或者按Escape时,缺省的是关闭动作。为了提供客户定制行为,例如显示一个对话框提示,当用户点击Close菜单项或者按Escape按钮,重写onClose().
一个RichTextField 的实例,一个可以接收焦点的只读富文本域 为了得到更多关于增加UI组件到屏幕中的信息,参看40页的“提供屏幕导航”
一个Select菜单项的上下文菜单? 为了得到更多信息,参看60页的“创建定制的上下文菜单“
代码实例
接下来的例子创建了一个屏幕,它包含了一个富文本域。当富文本域接收到焦点时,菜单保安一个Close菜单项和一个Select上下文菜单项。
例: HelloWorld.java
/**
* HelloWorld.java
* Copyright (C) 2001-2005 Research In Motion Limited. All rights reserved.
*/
package com.rim.samples.docs.helloworld;
import net.rim.device.api.ui.*;
import net.rim.device.api.ui.component.*;
import net.rim.device.api.ui.container.*;
import net.rim.device.api.system.*;
import com.rim.samples.docs.resource.*;
public class HelloWorld extends UiApplication { [...]
Confach发表于 April 22, 2008 5:32 pm | 留言 |文档
