译者
序
整个
2007
年的
9
月,我都把时间花在了撰写《
从
Java EE
到
Java ME
的通讯
》这篇文章上。其实这并不是对
2
年前的项目进行整理并
post
出来而已,这完全不是主要目的!!!
看官们完全没有理解我的用意,我得到的全是“文章转载”这样的留言回复!那篇文章的感言我这样写的:“要实现遐想并解释上面的问题有待于广大开发者的共同努力,把自己的业余时间都投入在类似
db4oME
这样的技术上,如果这样的分布式数据库能成功实现,我想这会给移动计算带来一场革命,更多依托网络、数据库的手机应用程序将会诞生,发挥
Java
强大的优势!”
我是
2007
年
11
月底得知
Android
的,正好对应了上面的感言!不知道国人是怎么想的,难道做手机应用程序没有做手机游戏有前途,还是无话可说只能对我的感言嗤之以鼻?如果是这样,那么看了本文之后也许会让你如梦初觉
……
为
手机
设备而生的
Android软件开发集合包
已经
发布了一周
。作为
db4o对象数据库
创始人的我来讲,这是我们的产品和公司最值得兴奋的事件之一。
Android
将把零散的手机开发平台统一起来,而且它可以开发基于位置的应用程序来服务全世界的用户。这就是为什么会掀起一场手机领域狂风的原因。
内容
(略,参考下面详细标题。)
这场狂风的前景
从全球化观点来看,手机操作系统是非常之零碎的。手机制造商和运营商这些关键角色,他们都有自己的一套私有技术。被认为是全球性的如
Symbian
,微软和
Apple
都显得较小了,他们每年分别为全球提供
60million
、
20million
以及计划的
10million
部手机。
由于没有标准的操作系统,运营商倾向于使写出的应用程序能让普通浏览器以
Ajax
(
Javascript
)方式运行。在手机上面运行
Ajax
是不方便的:
l
小屏幕上的用户体验是很不好的。
l
应用程序只能运行在连接互联网的状态下。
l
没有任何的本地化存储、结构化数据缓存的方案。
l
要开发出复杂交互的应用程序几乎是不可能的,因为要受到传输延迟和带宽的影响。
l
设备的本地处理能力没有发挥出来。
l
可升级的服务器端应用程序是一种开发挑战。
l
开发
Ajax
应用程序是麻烦、昂贵和缓慢的。
l
没有标准的接口来访问浏览器以外的本地设备服务,例如
GPS
、相机、联系人、呼叫列表、麦克风或扬声器。
设想今天你忽然有了灵感,这个灵感开发出来的应用程序可以超越现有应用程序(
rosen jiang
注:也可称作杀手级移动应用程序),而且也想把它部署到世界各地,你愿意选择哪种技术?
如果你还不着急发布的话,你应该采用
Android
。下面是为什么
Android
能胜出的理由:
基于位置的服务
Google
拥有一套服务器基础设施(
server infrastructure
)技术来提供基于位置的服务。
Adnroid SDK
提供了两个非常有用的包:
com.google.android.maps
以及
android.location
。你可以在
Google maps
上建立自己的覆盖图。如果你在某个位置的半径之内,
LocationManager
允许开发“
ProximityAlert
”这样的方式来唤醒电话或触发其它事件。
资金和广告资源
Google
。
开源
Android
是免费的例如免费啤酒一样,遵循
Apache License
开源协议。任何人都可以获取
Android
组件并用自己的技术来调用。为什么有些公司还要花费数年并投资数百万来重新发明轮子?如果他们复用了
Android
组件,这些花费都是不必要的!如果
Google
工程师们始终站在开发的前沿,那么那些私有的技术分支终将会统一到
Android
上来。
健壮的生态系统
伴随着
Linux
、
Java
以及
Eclipse IDE
,
Google
已经选择了开源生态系统中最强大的组合。
应用程序
Google
提供了
1千万美元的开发者挑战
奖励来确保各种应用程序能尽快开发出来。
技术
为了修建“摩天大楼”,最先发布的
SDK
展示了一些最聪明的
Java
工程师已经有足够的自主权和时间来实现从零开始的基础部件搭建。
经压缩改良后的字节码格式运行在
Dalvik Java VM
上,在消耗很少资源并且应用程序之间不互相干扰的情况下
Dalvik Java VM
可以并行运行多个应用程序。这些特性在
Suns Java RFE
列表上早就有了,
Google
只是简单的构建它们。
而利用
Apache Harmony
类库则是明智之举。这样
Google
就可以不受
Sun
的左右实现完整的开源
Java
。同时
Harmony
在很多方面都快得多。
从
SDK
第一天发布开始,就发现
Eclipse
集成能力是令人惊讶的。任何人可以在数分钟之内利用
Eclipse
开发出第一个
Android
应用程序。
Eclipse
中的
DDMS
透视图能控制和监控模拟器,这是我见过最好的模拟器管理控制台了。而其他模拟器经过多年的发展才得以成熟,比如
Microsoft
或
Symbian
可能给你留下这样的印象:模拟器不人性化,你不得不用多种不同的工具“连接”他们。而在
Eclipse
的
DDMS
透视图中,你可以立即察觉到发生了什么,可以从内部进行控制。日志视图不仅仅能输出连续的文字,还可以自己追加过滤器,例如通过
process
、
severity
或自己的标签。
你可以观察所有的运行活动,他们的堆使用率以及线程在做什么。系统能为你计算每个线程的消耗时间,非常棒。
指南能告诉你为什么控制设备上应用程序的效率是非常重要的:效率意味着更长的电池寿命,更低的电池重量和更少的设备花费。
多数应用程序框架的理念对我来说看上去都不错。下面是一些关键部分:
l
行为—应用程序的屏幕
l
意图—请求的动作
l
意图接收者—与请求相关的应用程序代码
l
服务—可共享但不可视的应用程序组件
数据库支持
“内容提供者”需要类似数据库的功能。对于我们来说这非常有趣,来看看
API
:
public abstract Cursor query(
ContentURI uri,
String[] projection,
String selection,
String[] selectionArgs,
String groupBy,
String having,
String sortOrder)
insert(ContentURI uri, ContentValues values)
update(
ContentURI uri,
ContentValues values,
String selection,
String[] selectionArgs)
delete(ContentURI uri, String selection, String[] selectionArgs)
什么?
抱歉,这里不是
Java
,也不是面向对象的,甚至连
SQL
都没有。
我们将在以后的文章中同步比较
db4o
的相应接口,来展示优雅的对象持久化是怎样的。如果你还不知道
db4o
,这里有
PDF版的指南
以及相应的
db4o下载资源
。
Android
数据库
API
忽视了基于位置服务的关键元素:
从“下一个汽车租赁站在这里”或“我所有的朋友都在
1
英里
内”这样描述中,你怎样建立查询?很明显,一个标准的地理空间查询必须成为数据库
API
的一部分。
我的第一个
Android
应用程序
现在继续写我的第一个
Adnroid
应用程序
……
要是没有工具的支持的话,我是不喜欢用
XML
写
GUI
界面。我确信基于
Eclipse
的可视化编辑器已经很好用了。为
GUI
开发设计的小部件集看起来像钉子在墙上罗列可视化的东西一样而不是用到的时候才释放。
Apple
在它的
iPhone
中也为提高用户体验设置了条状栏。也许
Google
希望社区创造更好的界面,“重新思考传统用户界面”的观点已经出现在
开发者挑战网站
的开发愿景章节了。
作为我第一个
Angroid
应用程序的部分,我直接把对象存储在
db4o
中,随后我感到愉悦而惊讶。为
JDK 1.1
开发的
db4o
完全可以在上面运行。
让我们看看为什么用了为
JDK 1.2
开发的
db4o
就要出问题。喔,调试
Eclipse
里面的模拟器是很好很快的。一会儿工夫就可以把应用程序部署到模拟器进行单步调试代码了,就像以前用其他模拟器查看一样。很好!
为什么错了?很明显,
java.nio.channels.FileLock#release()
抛出一个
IoException
,此外再也没有更多信息了。看起来我遇到了第一个
Android bug
。
当我从代码中删除了令人不快的
#release()
这行之后,我们的
JDK1.2
版本在我的小测试中完美的运行起来了。现在让我们把持久对象的字段变成私有的,看是否
AccessibleObject#setAccessible()
允许访问私有字段。好极了!这么重要的测试已经通过了,我们有了完整的未删减功能的
db4o
运行在这个系统上,且
Java
方言足够支持我们的一切操作。
Android
,让我们成为朋友!
总结一下,对于我来说基本构建部分看起来非常的健壮,也非常稳定和出色。
GUI
以及数据库支持还未达到国际水平,但是都可以通过
和我们一样
的第三方进行改进。
最后再写点什么吧:
杀手级移动应用程序
如果我没有在
db4o
工作,我将立即尝试如何开始构建基于位置的应用程序,和我梦想中的一样:
驾乘分享
没有必要一人一车。我们可以做的更好,而不是花费醒着的
1/10
时间在堵车上。这样也可以更好的保护环境。
一个基于位置的系统能发现两个人在同一时间总是走同样的路线,那么这样就可以把他们组织在一个车里。
有了大量安装这套系统的基础,从
A
地到
Z
地你甚至可以不需要自己的车。你只需要在手机中输入你的计划路线,接着系统会找到某人和你走同样的路线,实时的换车也是该服务的一部份。
类似烟雾污染法可以保护我们的环境一样,它也可以强制把驾乘分享系统安装在车上(仅仅是安装,不能强迫大家都来使用)。其实这样做最大的好处是通过节约石油来促进经济,同时也可以减少巨大的尾气排放。或许政府能付钱购买这套系统?
如果安全是被考虑的因素:
可以利用
Ebay
来显示评价(“好司机”、“不抽烟”、“讲好听的徒步旅行故事”),让人们在接触陌生人的时候有个客观印象。女性可以和女性结伴同行。
今天已经有了些基于互联网的驾乘分享系统,但是要应付大量的评论,系统必须是实时的,自动且非常的易用。想象一下你的电话用语音告诉你:
“停在下一个商场的右边,你的邻居
Sue
想乘车去
Santa Monica
。她为这次乘车提供一杯冰咖啡作为感谢,并愿意告诉你上周不在家的时候你的孩子在干什么。”
任何地方都能开会
你每天都会错过见到老朋友的机会,而且就差半英里或一两分钟的路程。如果事先能得到通知并一起喝咖啡不更好么?基于位置的移动系统能为你安排这一切。
试想你在国外的城市,而且没人陪你吃晚餐。为何不询问你的手机谁有空呢?也许在这个城市中有你十年未见的老同学,而且他还经营者这个城市中最好餐馆。去见见他吧!
你两周前就已经安排好和在纽约某人的会议时间,并即将飞往那个城市。但你现在却在费城参加另外一个会议,而且和纽约某人的会议时间正好重合。在这样繁忙的一天中,你怎样抓住机会来拯救自己?
放眼全世界!
标准的手机操作系统能让上面的两个应用程序非常容易实现。不仅在美国,而是在全世界都如此!
仅仅是为手机?
在理念上,看起来
Android
是专门为手机而生,但并不是其他应用和设备不能使用这样一种开放和免费的软件集合包。
可以预见,
Android
集合包能取悦设备制造商,因为在相同的开发时间下
Java
比
C
的编码速度更快。
Web 3.0
早在
Android
发布之前,一份商业展望报告就很直接的指出:
Web 3.0
将会是基于位置的,并且
Google
将会是主角。
现在我们知道他们(
rosen jiang
注:
Google
)是如何做的了。
惹
Steve Ballmer生气的原因,不因为Android只是一份没有活力的新闻稿。
它已经在工程上成功的运行起来了,为未来打下了良好的根基。
棒极了!太漂亮了!
祝贺所以的
Google
工程师让这一切成为现实。
谢谢你们!
Android
将会改变世界!
本站点相关内容
Android引领手机走向新高度—推开门下一英里就是db4o
Db4A—Android数据库
Adnroid密码管理范例应用程序
对于
Adnroid开发者挑战的想法
请注意!引用、转贴本文应注明原译者:RosenJiang 以及出处:
http://www.blogjava.net/rosen