为什么Android掀起了mobile飓风?
作者:Carl Rosenberger 译者:cleverpig
自从Android面向移动设备的软件SDK发布,已经有几周时间了。对我这个db4o对象数据库的创始人来讲,它已经成为了在我们产品和公司生命中最兴奋的事。
Android 将重振早已支离破碎的移动开发平台,并使面向全球用户、基于定位应用的移动开发成为了可能。我认为这才是移动飓风的掀起之时。为什么这么讲?我想下面会给出答案。
鸟瞰飓风
从整体的视角纵观,移动操作系统的世界呈现群雄并起之势。而其中的主要"赢家"就是那些拥有私有技术的手机厂商和运营商。但是,甚至连
Symbian、Microsoft、Apple这样的业界巨擎都没有占有明显优势:只不过是每年6000万、2000万、1000万的手机部署量。
由于没有标准的操作系统,因此运营商尝试着用AJAX在浏览器上编写应用,以使其应用变得更加通用。但将AJAX应用于手机的确存在着一些劣势:
- 在小屏幕上的用户体验不会好到哪里。
- 应用只能在连接网络的条件下工作。
- 没有本地存储和缓存结构化数据的解决方案。
- 由于传输延迟和带宽限制,复杂的交换应用不可能被实施。
- 设备的本地处理能力没有发挥。
- 可扩展的服务端应用开发面临严峻挑战。
- AJAX的应用部署是复杂、昂贵并且迟缓的。
- 没有标准支持浏览器访问本地设备服务:比如GPS、摄像头、通讯录、通话列表、麦克风或耳机。
设想一下,如果你有了一个绝对超酷的移动应用创意,并打算将它进行全球部署,那么你选择哪种技术?如果你并不急于发布的话,那么就应该使用Android。下面是我认为Android之所以称王的几点理由。
定位服务
Google这是因为提供定位相关的服务而闻名于世。而Android的SDK已经具备了两个非常有用的package:com.google.android.maps和android.location。你可以使用它们在GoogleMaps上面创建自己的超酷应用。LocationManager提供了"ProximityAlert"(接近性提示)的功能,它能够在你进入某个指定
位置范围时唤醒手机并完成某些任务。
资金和广告资源
Google在这方面可称得上相当老练、资深了。
开源
Android采用Apache
License,就像免费啤酒一样提供给每个人免费下载、使用。每个人都能利用Android组件并将它们用到自己的科技产品中。有哪家愿意花费时间和金
钱来重新发明轮子,而拒绝重用Android组件呢?如果得到了来自Google工程师的开发支持,那些归各家公司私有的技术分支注定将汇聚到
Android产品线中来。
强大的生态系统
有了Linux、Java和Eclipse IDE这些强有力的伙伴,Google将成为最强大的开源"生态系统"。
应用
Google已经发起了1000万美元奖金的开发者挑战赛,来促进应用快速成长。
技术
Android的第一个SDK完全是那些聪明绝顶的Java工程师在足够自由和时间的保证下从草图开始创建摩天大楼的"基石"。
Dalvik Java
VM采用简练、高效的bytecode格式运行,它能够在低资源消耗和没有应用相互干扰的情况下并行执行多个应用。这些特性已经在Sun公司的Java
RFE(Request For Enhancement)上出现多年了,而却被Google轻松地实现了。
Google使用Apache的Harmony
类库是一个明智的举动。这样Google便脱离了Sun而走上全面开源Java之路。而且Harmony在某些方面的速度也快于Sun的VM。
Android随SDK而发布的Eclipse集成工具是个令人吃惊的好工具,任何使用Eclipse的开发者都能在几分钟内编写完第一个可运行的
Android应用。它在Eclipse中的DDMS视图提供了对模拟器的控制和检测,它是我所见过的最好的模拟器管理控制台。通过它,你可以看到所有运
行着的活动、堆使用率和线程工作状况,而且控制系统还将每个线程消耗的时间作自动叠加。
Android指南告诉了开发者"为什么在移动设备上高效地控制应用是多么重要":高效意味着更长的电池寿命、更轻的电池重量和更低的设备开销。
我认为Android应用框架概念看上去都很不错,其中一些出色的关键点:
- 活动领域(Activity) - 应用的屏幕
- 行为意图(Intent) - 一个行为请求
- 行为意图接收者(Intent Receiver) - 对请求作出反应的应用代码
- 服务(Services) - 可分享的不可见应用组件
数据库支持
"内容提供者" 意味着能够提供类似数据库的功能。目前,这是db4o非常感兴趣的,让我们看Android中提供的数据库操作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,那么这里是db4o的下载
和开发指南
。
目前的Android数据库API还缺少基于定位服务的关键元素:开发者如何创建对"邻近的停车场" 或者"位于在1公里内的好友"等与定位服务相关的查询?非常明显,地理信息的标准查询是数据库API中很必要的部分。
我的第一个Android应用
当然,我尝试编写了第一个简单的Android应用...
我并不喜欢用XML编写GUI的方式,因此我想一定会有Eclipse可用的可视化编辑器出现。Apple在iPhone中为用户提供了"bar"
来提高用户体验,也许Google正在希望社区能够创建一些更好的东西,因为"重新思考传统的用户接口"已经被写在了Android开发挑战赛网站上,成
为了评选的一大原则。
作为我的第一个Android应用,我简单地将一个对象保存到db4o并出奇地高兴,因为支持JDK1.1的db4o很出色地完成了这个简单的任务。
因此,让我们看看当使用支持JDK1.2的db4o会遇到什么问题?哦,在Eclipse中调试模拟器的感觉可真是超好、超快。在将应用部署到模拟
器或者步进式调试代码时没有任何的时间延迟。这太棒了!发生了什么问题?
明显地,java.nio.channels.FileLock#release()方法跑出了IO异常。嘿,我发现了我的第一个Android
bug。在删除了这句惹事生非的#release()语句后,JDK1.2版本代码通过了我的小测试,并运行良好。接着,让我们将持久化对象中的字段修改
为private,来看看AccessibleObject#setAccessible()是否能够允许我们访问这个private字段。太酷了,它通
过了测试,我们拥有了一个运行在Android系统上的、功能完整的db4o,可见Android系统上的Java足够支持我们所做的每件事!
Android,让我们成为朋友吧!
综上所述, 上面编写的代码看上去非常酷、而且稳定。Android对GUI和数据库的支持并不尽善尽美,但它们却都能被db4o这样的第三方软件提供商来改善。
Mobile顶级应用
如果我没有在db4o工作的话,那么我将会马上去创建我所梦想的基于定位的应用 :
驾乘分享
一个人独占一辆汽车是没有必要的。我们能够做得比在交通堵塞中度过人生中十分之一的"清醒"时光更好,而且更好地保护我们的环境。
基于定位的系统能够发现总是同时走相同路线的两个人,这将使将他们组织在一起拼车成为了可能。通过安装巨大的数据库,你甚至在从A地至Z地的过程中
无需开车。你只需要在手机上输入你所计划的路线,系统将自动发现那些走这条路线的人,并且按需更换搭乘的车辆也将成为服务的一部分。
就像我们制定环境保护法一样,我们还可以利用法规强制在汽车上安装"驾乘分享"系统(只是强制安装,而不强迫使用)。这样,通过节省了汽油、减少排出的废气而获得的经济收益将是巨大的。甚至政府还可能为这样的一个系统买单?
如果你认为安全性是个问题的话: 那么女性驾驶者可以搭载女性乘客啊。
当今,已经有一些基于兴趣而开发的驾乘分享系统,但还没有能够力拔头筹的系统:它必需具备实时、自动化、并易用的特性。
想象一下你的手机将通过语音告诉你:"请停在下一个超市旁,你的邻居Sue需要搭车到Santa
Monica。作为回报,她为你提供一个冰点,并将告诉你一些关于上周你不在家时你的孩子的所作所为。"。这简直是酷死了。
随时随地会面
通常,你都要每天穿梭于老朋友之间, 但也许经常和他们只相距半公里或者十几分钟的路程。而如果这时你收到手机发来的好友提示,并能联系到好友和他一起喝杯咖啡,难道这不很好吗?而移动定位系统能为你作这样的安排。
假如你身处外地,并没有朋友一起吃晚饭。那么去问问你的手机可以找到谁吧?也许你十年未见的同学正生活在这个城市,并拥有城镇中最好的酒吧!。。。你只需要做的就是走上几分钟,去找他一起喝上几杯。
假如你在纽约有和某人的会议约定,而你正准备乘飞机到那里。目前你在费城开另外一个会议,而此时那个在纽约将会面的人也在此地。这将是你节省一天路程的好机会!?
感谢全世界
Android这个标准的移动操作系统将使上面所谈的两种应用变得易于编写。而这种变革不仅发生在美国,而是全世界。
只为手机而作?
当然Android看上去是为手机而编写。但没有理由使这个开源、自由的软件被用于其它应用领域和设备上。
我觉得Android能够说服设备生产商: Java能够在相同的开发时间内编写比C更快的应用。
Web 3.0
在Android发布之前,来自商务方面长达10000英尺的报告已经非常明显地提出:Web3.0将基于定位服务,Google将成为大赢家。
Android不是敷衍的发布版本,那将使Steve Ballmer感到愤怒的。它已经成为了优秀的工程,一个面向未来的一流基石!Android正在改变世界!