`

Windows Mobile与Android应用开发对比

阅读更多
Windows Mobile在经历过最初的Wince系列,pockect pc和smartphone两种版本,到微软最新的Windows Mobile 6.5,Windows Mobile凭借与桌面平台良好的兼容性已经微软在移动领域的不断努力,在智能手机操作系统中已经占据了接近15%的市场份额。微软所推崇的 Windows Mobile下的基于.net compact framework也越来越成为开发微软平台的首选。微软的曾经的.net战略从一定意义上来说,在移动开发上得到了实现。

OPhone作为基于Android开源平台的移动操作系统,在开发上沿用了Android的开发特性和环境,而Java是首选的开发语言。比较有意思的是,微软的.net战略在企业级开发上最大的对手是J2EE,而在移动操作系统中,除了诺基亚的Symbian由于手机的高占有率而在移动操作系统的高份额外,Windows Moible与Android是未来两个有希望与Symbian三分天下的操作系统,这样似乎java与.net(C#)的战争要持续烧到了移动平台上了。



这里将就两个平台在开发方面所关注的问题进行比较,并不是要得出谁优谁劣的结论,而是能让会其中一个平台的开发人员也能熟悉另一个平台的相关问题。

开发工具 Visual Studio 和 Eclipse

Windows Mobile的主流开发工具肯定是Visual Studio了,Android是Eclipse。两个都是大名鼎鼎的集成开发环境,并代表了两个不同的阵营:.net 和JAVA,根据笔者在移动开发上 的使用经验,从以下几个方面来比较。

开发环境的成本和搭建,Windows Mobile当然只能在windows平台下开发,不管你用盗版还是正版,xp是必须的,然后再安装VSTS(visul studio team suite),这一套动辄就好几万,当然你也可以使用180天试用版本,过半年再重装次系统,这也比较划算,装完之后再从微软官网上下载最新的 windows mobile SDK,最好再装一个中文版的Emulator image,这样windows mobile的环境就基本搭建起来了。相比之下,OPhone完全是免费的,操作系统可以选择windows和Linux,这里推荐用ubuntu。安装 JDK,然后下载相关平台的 Eclipse,安装adt,从SDN下载OPhone的SDK,这个过程可以参照OPhone提供startup文档。

对移动代码的调试跟踪,无论是模拟器还是真实设备,Visual Studio 2008+ ActiveSync比 Eclipse+ADB要好用很多,微软在调试器的可视化 易用性上都有很优秀,相比来说,google为Eclipse开发的ADT plugin,一方面可能是Eclipse自身的局限,另一方面Android开发刚刚起步,在对集成开发调试上应该还有很多的空间来提升。另外,同步工具ActiveSync其本身并不单是一个开发的辅助软件,而是一个真正意义的同步工具,它会自动侦测端口,设置虚拟IP,同步电脑数据,这样只要把手机连到电脑上,ActiveSync圈圈变绿,就可以直接把软件 部署到手机上进行调试,而Android还要手动做上面的事情,不太方便。

仿真设备(模拟器)比较,从启动速度,性能上,两个都差不多,windows mobile区分了smartphone和pocketpc,而android可以通过设置emulator 的skin参数,可以获得不同皮肤,不同机型的模拟器,比起苦苦等微软发布新一个版本的模拟器,在Android的开源联盟努力下在模拟器的多样性肯定会更丰富。

GUI开发 从一个HelloWorld开始



1.先说Android,当我们使用向导创建了一个新的Android工程之后,在包浏览中可以看到以下的文件。



我们要编辑的文件分布在 src和res下,包括HelloWorld.java和 main.xml , strings.xml.

这个HelloWorld就继承自Activity(Android Framework里面最重要的一个类, 我们简单地理解为它是一个UI的容器,直接跟用户打交道最前端的类。对于Windows mobile了的程序员来讲,简单的理解就是 Activity+View=Form.

还有一个R.java,这个类是系统根据res文件夹中的内容自动为你生成的,大家不要修改它.我们先讲一下res文件夹,在这一点上,wm和 Anroid很相似,res是resources的缩写,顾名思义,你程序中所需要的文字,图片,布局文件等等资源都是放在这个文件夹下面的,你现在看到这个文件夹下面有

drawable - 这个是放图片的

layout - 这个是放布局文件的

values - 下面放字符串(strings.xml ),颜色(colors.xml ),数组(arrays.xml )

Android 帮我们把这些资源都管理起来,内容资源化的作用是很明显的,做国际化方便了,使用同一个资源的时候也方便也更节省空间(全局的引用),res文件夹中内容变化,R.java都会重新编译同步更新,所以这个类不需要你去手动更新了。

最后是AndroidManifest.xml. 你每次添加一个Acivity都需要在这个文件中描述一下Windows Mobile与Android应用开发对比。

看一下代码:

1. publicclassHelloWolrdextendsActivity{
2. /**Calledwhentheactivityisfirstcreated.*/
3. @Override
4. publicvoidonCreate(BundlesavedInstanceState){
5. super.onCreate(savedInstanceState);
6.
7. //指定这个Activity的界面布局,如果不指定,运行起来是默认空白的,如何布局后面讲述
8. setContentView(R.layout.main);
9. //这句话就是用来获取layout中设置的界面控件对象的,这个id是在button中指定的
10. android:id="@+id/button_normal"
11. Buttonbtn=(Button)this.findViewById(R.id.button_normal);
12.
13. //为btn添加响应函数
14. btn.setOnClickListener(newOnClickListener(){
15.
16. publicvoidonClick(Viewarg0){
17. TextViewtv=(TextView)this.findeViewbyId(R.id.text);
18. tv.setText(R.id.hello);
19. }
20. }
21. )
22. }
23. }
24.
25.
26. <?xmlversionxmlversion="1.0"encoding="utf-8"?>
27. <LinearLayoutxmlns:androidLinearLayoutxmlns:android=
"http://schemas.android.com/apk/res/android"
28. android:orientation="vertical"
29. android:layout_width="fill_parent"
30. android:layout_height="fill_parent"
31. >
32. <TextViewandroid:idTextViewandroid:id="@+id/text"
33. android:layout_width="fill_parent"
34. android:layout_height="wrap_content"
35. android:text="@string/hello"
36. />
37. <Buttonandroid:idButtonandroid:id="@+id/button_normal"
38. android:text="@string/clickme"
39. android:layout_width="wrap_content"
40. android:layout_height="wrap_content"/>
41. </LinearLayout>

2.再来看一下Windows Mobile

新建一个设备应用程序项目“Hello World”,如下图:



屏幕左侧出现了一个可编辑的设计界面,我们要设计HelloWorld的界面,只需要从工具箱里拖拽一个button和一个lable。比起Android来,微软因为其强大的集成工具,让可视化的界面变成变得非常简单,所见即所得。

为button添加响应函数,双击button,在Click事件中些如下代码:

1. this.label1.Text = "Hello World";

点击F5,直接 运行就可以了。

总结:做一个相同功能的HelloWolrd例子,Android需要修改修改三个文件,写18行代码,而WindowsMobile只需要拖拽两下,写一行代码。 无疑,WindowsMobile在GUI开发上快速的多。

界面风格比较

windows mobile 到了最新的6.5,界面上终于有了不小的改观,记得从6.1开始,对基础控件的绘制和渲染都有增强,但是要开发一个足够绚丽的界面,就像Pointui这种应用,难度还是很大的,因为大部分界面都要用GDI来自己绘制,因为微软提供的基础控件数量很有限,包括著名的 opennetcf库,在样式的支持上基本没有,所以自定义控件成为摆脱平庸UI的唯一方法。

这里还想要告诉大家的是微软一个龌龊的行为:如果我们想要对Button这个控件稍微的扩展一下,加上一点点我们自已的东东。结果是很麻烦,很麻烦。究其原因是:微软不是用GDI中的 Graphics的函数进行绘制这些基本控件,实际上MS还是用的老办法,就象古老的C++程序一样,这样基于.net来做这件事情,唯一的方法就是捕获 winproc消息,很不爽,而微软为什么要这么做呢,是为了避免咱们侵犯人家的外观专利。。。。

反观Android,在View的支持上不但提供了样式功能丰富的经典控件,而且允许灵活的扩展基础控件,不谈别的,就一个简单的例子,就说一下弹出对话框吧,如果我想在这个对话框中加入进度条,如图:



这是OPhone的一个基本控件,而如果在Windows mobile来实现的话,MessageBox肯定是不能扩展的,那么只能从头写一个,单是做一个背景透明的半窗体就很麻烦。所以在 WindowsMobile的应用程序里,第三方的应用UI体验常常是良莠不齐,而且MFC的,ATL的,.netComactFramework的,技术混杂。归其原因是一方面微软用PC 绑架了手机,.net平台做了一下裁剪就直接用了,可是,移动平台的UI与PC还是有很大区别的,另一方面就是不够开放。

系统核心对象比较

1.Form与Activity,View

做过Windows桌面编程的都会对Form有了解,Form 是应用程序中所显示的任何窗口的表示形式,即使一个Dialog也是对Form的一种派生。Form同时是一个容器,可包容其他继承自Control类的其他控件.

Windows Mobile下的Form的概念与桌面端是一致的。任何我们看到的界面都是一个包含在 Form中的布局。

而android中Activity,他相当于MVC模式中的Controler,它会与用户去交互,并对这些交互进行处理,我们可以通过调用 setContentView()来给Activity设置界面布局,Android的这种设计实现了界面设计和逻辑功能设计的真正分离,对View的高度抽象,也让界面具有高度扩展性,可以设计出更加丰富的界面体验。

2.Android中特有的Intent

Intent 提供了一个在不同应用的代码之间进行晚绑定 的机制。它主要被用来启动 Activity,还有服务等,它提供了应用中不同Activity之间,不同应用之间的通信方式,这既能对应用间的模块相互解耦,也让应用程序互相之间发挥共同的效力,这一点在windows mobile下是很难做到的,Form之间通常是依赖关系,耦合性很大,而一个应用要调用其他应用的某个功能,除非引用后者开放的类库,几乎没有什么好的办法可以做到。

3.ContentProvider和ADO.net

两者的设计目的有些相似,都是为了抽象数据访问层,ADO.net中有个很重要的概念:DataSet,我们可以通过各种数据源来填充 DataSet,其实DataSet本质上就是一个内存中的数据库,有数据表,支持Sql查询,它支持多种数据源,如:sql数据库,xml,文本文件等。

相比起来,ContentProvider为我们提供了更大的灵活性,Content Provider用于将各个应用程序的数据进行共享,Content Provider是一个类,执行一套标准的方法,让其他的应用程序存储和获取Content Provider所处理的数据. 如果比较ADO.net和ContentProvider的话,ADO.net的数据访问模块是程序级别的,其他应用很难共享到既有应用对数据的加工处理,二ContentProvier通过一个唯一的ContentURI定位Provider,所有应用就可以通过构造ContentValues来对数据源进行操作。

总结:

对开发者来说,windows mobile与Android在体系架构上有很大不同,但在开发语言上,面向对象等方面,只要熟悉一下,两者之间的相互迁移并不难。

对于Mobile OS来说,不同于桌面操作系统,这必将有一场惨烈的淘汰赛,究竟是一家独大,还是三国分离,还是不同程度的整合,都是一个问号。未来的移动世界,网络肯定是永恒的主题,不同的操作系统也在这个方面做整合,互联网在不断嵌入到手机平台中,移动搜索,Widget技术,各种各样的网络服务,相信移动的世界会越来越精彩,而对于开发者的我们,多掌握一种技术,可能就是多一个机会。以上介绍Windows Mobile与Android应用开发对比。
分享到:
评论

相关推荐

    新版Android开发教程.rar

    的 Android SDK 提供了在 Android 平台上使用 JaVa 语言进行 Android 应用开发必须的工具和 API 接口。 特性 • 应用程序框架 支持组件的重用与替换 • Dalvik Dalvik Dalvik Dalvik 虚拟机 专为移动设备优化 • ...

    android行业分析

    本篇简介: 3 1. 当前资讯 3 1.1. OHA成员列表: 3 1.2. 中国版的Android纠结上路 4 1.3. 移动OPhone或9月面市:与iPhone抢跑 9 ...5.3. android应用分类: 67 5.4. 编者注: 68 6. 常用网址整理: 69

    基于Android的3D魔方设计实验指导书

    手机 3D 开发,除了微软的手机系统 开发,除了微软的手机系统 开发,除了微软的手机系统 开发,除了微软的手机系统 开发,除了微软的手机系统 开发,除了微软的手机系统 如 Windows MobileWindows Mobile Windows ...

    基于Android平台手机图形编辑软件的设计与实现

    WindowSMobile和Linux等智能手机操作系统进行了简单的分析和 对比。对开发本软件所基于的Android平台进行分析。介绍了 Android平台的体系结构、平台的功能特征。同时对本文开发过程中 用到的相关技术进行介绍分析。...

    Android程序设计基础

     论坛,在此你可以直接与作者及其他Android开发人员交流(希望论坛用户越来越多)。  读者可以在自己的应用程序中随意使用源代码。  关于“快速阅读指南”  虽然大多数作者都希望读者阅读他们书中的每一句话...

    MTK与ŽAndroid的技术基础

    1. MTK的下一代硬件[1],既能支持Android,也能支持Windows Mobile。为什么MTK没有选择人气正旺,而且免费开源的Android,反而选择联姻WinMobile呢[2]? 2. 2009年3月,微软与MTK宣布结盟,共同开发针对中国TD-...

    基于Android平台的星座查询软件设计.doc

    本文对目前应用的Symbian、WindowsMobile、MacOSX和RIM等平台的现状进行了分析与比较。进而研究分析了Android平台的系统架构和组件模型,接着解析了Android中的重要API和应用构成,以Intent和生命周期的机制。在此...

    基于Android平台的星座查询软件设计-毕业设计(论文)

    本文对目前应用的 Symbian、WindowsMobile、MacOSX和 RIM等平台的现状 进行了分析与比较。进而研究分析了 Android 平台的系统架构和组件模型,接着 解析了 Android 中的重要 API 和应用构成,以 Intent 和生命周期的...

    基于android的手机地图设计

    本文对目前应用的Symbian、Windows Mobile、Mac OS X和RIM等平台的现 状进行了分析与比较。进而研究分析了Android平台的系统架构和组件模型,接着 解析了Android中的重要API和应用构成,以及Intent和生命周期的机制...

    计算机应用基础第三章《计算机的组成》.pptx

    操作系统种类—手机 手机操作系统 目前应用在手机上的操作系统主要有Android(谷歌)、iOS(苹果)、windows phone(微软)、Symbian(诺基亚)、BlackBerry OS(黑莓)、windows mobile(微软)等。 1996年,微软...

    智能手机客户端应用技术浅析

    Windows Mobile是微软主推的智能手机应用平台,传统的Windows程序员可以比较轻松的完成由PC客户端至手机客户端开发的过渡。Android智能平台由Google公司主导,基于Linux嵌入式内核,融合大量成熟的基础类库,上层应用...

    智能手机的主要功能都有哪些.docx

    智能手机品牌以及操作系统 诺基亚:symbian,Windows phone,meego 三星:Symbian,tizen,android,bada,Windows mobile。Windows phone 苹果:ios 智能手机的神奇功能 1、红外线探测 肉眼看不到红外线,但是智能...

    《程序员》杂志2012年第1期.pdf (免费积分下载)

    而iOS和Android两大移动平台迅速崛起,不仅大幅抢占了Windows Mobile/Windows Phone、MeeGo、webOS、Symbian、BlackBerry的市场份额和生存空间,不动声色地将PC降低为普通设备,更使Google和Apple两大平台公司...

Global site tag (gtag.js) - Google Analytics