很多开发者对Android 3.1、iOS 5和Windows Phone 7.1 Mango之间新特性的对比还不是很清楚。下面Android123就三大平台的最新版开发特性作对比: 目前就发布时间来看 Android 3.1已经发布,iOS 5还要过几个月等iPhone 4S上市,而WP7的芒果估计要到9月份了 1. NFC移动支付,目前Android 2.3开始就支持NFC,而iOS 5仍然没有动作,而可怜的Windows Phone 7.1 Mango似乎还不知道NFC是何物。 2. ADK开发,对于周边硬件的开发,Google Android提供了ADK开发包,我们可以当做是一个USB的扩展辅助,帮助Android识别其他设备的USB通讯协议,如果哪天Google整出个类似DDK那就更有意思了,而iOS似乎只对知名厂商提供支持和授权,WP7.1这些还看不到任何迹象,最终应该还是只有OEM能开发吧。 3. 多任务支持,Android与生俱来就支持多任务,这似乎也是Linux的优势,而iOS从4开始支持伪多任务,就是让当前线程挂起处于休眠状态,处理完其他任务后再唤醒,这样iPhone一直无法挂QQ,不过Windows Phone 7.1开始支持多任务和Android一样,可以挂QQ了。 4. 来电控制,Android提供了开放的API,可以开发来电防火墙,显示归属地,或者是处理自己的应用当来电时保存状态,挂断电话后的状态做处理,而iOS必须越狱并使用非官方SDK方式实现,目前Windows Phone Mango对电话方面没有任何支持,而早期的Windows Mobile我们可以方便的处理RIL层,似乎微软现在封闭了。 5. 高性能计算,Android从1.5开始支持NDK,可以使用C/C++开发性能敏感的算法或3D GL图像相关的显示,从NDKr5开始支持精简的C++ STL标准库,iOS使用的Objective-C也可以很好的支持ISO C和C++,不过目前WP7只能用C#或VB.NET这样托管语言编写,而早期的Windows Mobile是支持Dot Net Framework和Native C开发的,似乎高端的体验度要大打折扣了。 6. 界面定制,Android可以很轻松灵活的更换界面主题,而iOS的封闭官方是不允许的,WP7由于界面比较简洁功能较单一,并不是很有竞争力,至少Android变身iOS和WP7的界面来说很轻松,而桌面的Widget小插件的趋势和优势已经显现出来。微软作为小插件的领跑者早在Windows Vista推出了Gadget的侧边栏小插件开发接口,但这一概念似乎在Windows Phone上荡然无存。 7. 固件升级,Android目前的固件升级是比较头疼的,由于厂商较多,改变的更多,硬件的限制不是很严格导致固件不统一,目前Google不开放Android honeycomb的代码也是防止山寨厂商推出低配的平板降低Android […]
对比
Android 4.0和WP7.5开发技术对比 Android开发技术
对于谷歌Android 4.0 Ice Cream SandWich和微软WP7.5 Mango在开发技术上作对比,可以看出早期Google学习了Microsoft的WPF的设计方式,由于微软Windows Phone 7发布缓慢,导致Google在技术上将微软复杂的设计方式改进,从现在来看安卓冰激凌三明治和微软WP7芒果来看开发技术上仍然存在着巨大的差异。对于准备步入移动开发的网友,就目前主流的系统做简单的分析: 一、UI控件和设计模式 对于WP7来说,整体控件数量不如Android丰富和实用,但也有一些创新的地方,比如说枢轴Piovt控件,在触控操作上比Android的TabHost强了很多,但没有提供类似GridView这样的控件在Siliverlight中,由于WP7的UI刷新机制基于MVVM模式,相对于Android的MVC有些不同,需要继承INotifyPropertyChanged接口,通过数据绑定来更新UI控件的值,相对比较繁琐。在控件自定义方面,WP7可以使用银光的UserControl或从任何已有的控件中直接派生,对于Android来说这点基本相同,但提供的方法比如触控、长按相关的微软这点都要 依赖Toolkit来实现,整体相对繁琐很多。 二、数据库层 微软在数据库方面一直有MS SQL,在手机上有SQL CE这样的轻量级数据库,但操作处理方面同样需要实现 INotifyPropertyChanged接口进行更新,修改表,似乎变得更加抽象。同时数据交换方面微软还有LINQ,在Web Services方面几乎和J2EE差不多,但相对于手机上而言Android的SQLite似乎更好用明了,这点微软确实输了。 三、系统执行模型 在WP7.5 Mango上支持了多任务,内存管理几乎和Android一模一样,同时新增了类似iOS上的数据推送,需要微软服务器中转的Push Notification,由于考虑应用随时被系统内存回收,必须保存每个页面的数据到持久化的存储中,比如类似Android的SharedPreferences而在WP中为银光的IsolatedStorageSettings,在很多地方微软都在学习着谷歌,相比WP7到WM6的改进来看。 四、图形系统 这点WP7和Android有着天壤之别,Windows CE下3D为DirectX,2D为GDI方式渲染,而Android下为OpenGL,同时WP7无法使用本地语言开发,导致iPhone和Android程序员在3D方面很是陌生。 五、文件系统 在WP7芒果上,微软学习了iOS那样的封闭,每个应用完全独立,所以没有文件管理器这个概念,导致了Adobe Reader这样的应用必须将pdf放入邮箱中,通过邮件附件来打开阅读。同样每个Windows Phone 7芒果手机一般不会有microSD卡,而是机身至少内置8GB或16GB的存储空间,同样无法用U盘功能,每个应用相对隔离,运行在自己的沙盒空间里,对于应用可靠性和安全有了保障,但是对于部分实现方面确实不够好用。 六、运行流畅度 如果你看见WP7手机运行很流畅,那么你可能真的错了,在本质上Java虚拟机和微软的.Net Framework运行时库的底层效率差不多,但Android的手机一般运行着更复杂的桌面,比如左右N个主屏和一堆appWidget小插件,而微软似乎Windows Phone 7的应用一般限制在5个同时工作的,否则将会被结束任务,同时由于部分低价Android设备,导致整体硬件配置偏低,比如有ARM11的CPU,RAM只有256MB的情况,而微软WP7第一代手机至少配备了A8 1GHz的处理器,512MB的RAM,第二代的WP7 Mango手机配备了1.4GHz新一代高通Snapdragon,比如8X55系列,所以很多地方了看WP7更流畅,但其实从单个应用来看,WP7应用的启动速度远不如Android平台上的应用,所以微软甚至设计出了SplashScreenImage.jpg这样的图片为每个默认工程提供一个载入图片。如果是微软系统自带的应用由于可以调用本地的方法相对于第三方的Windows Phone应用来说启动会快很多。 最终结论是Android123仍然推荐大家在高效和开放的Google提供的平台开发,至少不会束缚你的想象力和实现速度,微软设计了很多限制和门槛,同时不开源在分析和实现上都会产生很多问题,至少Android的SDK可以工作在Mac OS、Windows各个平台和Linux上,而微软似乎将WP7 SDK锁定在Vista和Win7上。

Fragment对比Activity – Android碎片介绍 Android开发技术
Fragment是Android honeycomb 3.0新增的概念,Fragment名为碎片不过却和Activity十分相似,下面Android123介绍下Android Fragment的作用和用法。Fragment用来描述一些行为或一部分用户界面在一个Activity中,你可以合并多个fragment在一个单独的activity中建立多个UI面板,同时重用fragment在多个activity中.你可以认为fragment作为一个activity中的一节模块 ,fragment有自己的生命周期,接收自己的输入事件,你可以添加或移除从运行中的activity. 一个fragment必须总是嵌入在一个activity中,同时fragment的生命周期受activity而影响,举个例子吧,当activity暂停,那么所有在这个activity的fragments将被destroy释放。然而当一个activity在运行比如resume时,你可以单独的操控每个fragment,比如添加或删除。 Fragment作为Android 3.0的新特性,有些功能还是比较强大的,比如 合并两个Activity,如图 我们可以看到两个Activity通过两个Fragment合并到一个Activity的布局方式,对于平板等大屏幕设备来说有着不错的展示面板。不过因为Fragment和Activity的生命周期都比较复杂,我们分别对比下: 创建一个fragment你必须创建一个Fragment的子类或存在的子类,比如类似下面的代码 public static class Android123Fragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.android123_fragment, container, false); } } Fragment类的一些代码看起来有些像Activity为了让大家了解清楚,Android开发网给大家整理下Fragment的生命周期如上图所示,部分类似Activity的,我们详细解释 onCreate() 当fragment创建时被调用,你应该初始化一些实用的组件,比如在fragment暂停或停止时需要恢复的 onCreateView() 当系统调用fragment在首次绘制用户界面时,如果画一个UI在你的fragment你必须返回一个View当然了你可以返回null代表这个fragment没有UI. 那么如何添加一个Fragment到Activity中呢? Activity的布局可以这样写 <?xml version="1.0" […]
Android中的XML解析各种方式对比 Android开发技术
随着Web2.0的兴起XML越来越受大家重视,作为一种标准的数据存储方式Android是如何支持的呢? 在android平台中提供了多种xml parser解析器,常见包含dom、sax、pull这样的主流方法。目前G1的处理器和内存相对于MIDP设备来说大了很多,对于数据量小于10KB以内的文件使用Dom方式比较方便,主要是XPath查找很好,android123提示如果是一个属性之多的大型文件可以通过sax这样的单向流方式解析,它的好处就是不占用太多的内存,但是控制起来和代码量都是比较大的。这里和J2ME的KXML相同的内核。 Android平台中相对于常规的存储,SharedPreferences足够保存,但是他无法很好的处理外部文件,比如存放在sdcard中的内容,而XML可以很好的决绝,对于复杂的文件和多种方式查询,可以使用结构化的数据库语言SQL来解决,不过SQLite的性能一直表现一般,在资源占用上还是很大的。

