T_T 这伪技术博客都快给写成Tron的读书笔记专栏了,这样可不行欸~
如今正是移动平台的战国时期,厌烦了去讨论移动平台的未来,也无意于在HTML5和Native App之间纠结。本文只从开发者纯技术的角度聊聊各移动平台的特性。

1.WP7
个人挺喜欢wp7的系统,所以连带着也喜欢起wp7的开发。WP7开发常常与MVVM(Model-View-ViewModel)模式一起出现。抛开执行效率不谈,我觉得MVVM是在移动平台上写起来最优美的数据绑定策略。当然,MVVM与WPF/SL的整体架构是分不开的。现在虽然有好事者在安卓上也整了一套MVVM框架,但我总感觉怪怪的。MVVM可以使开发者把UI操作的注意力集中到ViewModel层上,对于双向绑定、单向绑定、集合绑定都有很好的解决方案,配合起WPF的UI分离策略,让人写起代码干净而利落。
由于众所周知的分辨率问题,长期以来WP7开发者都对IOS/安卓持有十足的心理优越感。但是随着lumia920等产品发布,wp7的分辨率480×800的单一格局也被打破了。目前来看,新的分辨率带来的冲击似乎也并不大。老式的WP7.1 480×800程序会直接拉伸到高分辨率。虽然浪费了一些分辨率,但这对不少直接用绝对坐标做布局应用来说(这在wp上相当普遍),至少没有产生明显的UI BUG。
由于WP系统的Metro风格,UI设计变得极为轻松。反正走简约风嘛,装一个Metro Studio就已经解决了我几乎一半的UI工作。
微软的IDE和文档也挺不错,wp7开发还算愉悦。

2.Win8
虽然同样是.net wpf silverlight那一套东西,但wp7应用移植到win8上对我来说几乎是重写(除了ViewModel层可以直接复制粘贴)。如果我没记错的话,wp7应用基于.net 3.5的阉割版,而win8的metro应用是基于.net 4.5的阉割版。而.net各个版本之间的变化我觉得还是不小的。
.net 4.5对于我来说最大的惊喜是await/ async异步编程语法,我觉得仅此一条在我心中的份量已经超过了c++ 11的全部新特性。已经被异步编程时的各种匿名函数花括号晃花了眼?不想再在网络请求时使用各种delegate且纠结于各种双向引用带来的内存泄漏?在多级网络请求时形形色色的异常处理语句总让人一头乱麻?试试await语法吧,绝对超乎想象。
由于win8是新平台,各种第三方sdk不是比较少,而是几乎没有。因为我做的是个社交应用,只好先写个REST网络封装库,再依次写了SinaWeibo for win8 SDK, Renren for win8 sdk, Douban for win8 sdk。借助于await语法在异步编程开发效率上带来的提升,写这些sdk倒也没花多少时间。
wp7/win8应用的桌面瓷贴特性是其它平台都没有的,这一点可以好好利用一番。

3.ios
由于笔者是从win8开发切换到ios上,所以初入ios门不免有一夜回到原始社会之感。
最大的不适应来自UI编程,虽然xcode也自带有可视化的UI开发工具,但我感觉那东西连玩具都不如。99%的UI布局工作还是要手工敲object-c代码。最让人受不鸟的是ios中居然没有原生的相对定位布局方法(类似于wpf中的StackLayout或是安卓中的LinearLayout),所有控件坐标几乎都要拿代码计算,遇到一个可变高度的列表那简直让人头皮发麻了。
好在ios上有不少优秀的开源类库,例如facebook团队贡献的three20就被ios开发者广泛使用,几乎都快成为准官方库了。
ios5以后开发者轻松了不少。一是苹果推出了ARC(Automatic Reference Counting)机制,省去了手动释放内存的工作,但是把应用了ARC的代码和没有应用ARC的代码(很多是第三方库)放在一起使用还是要额外花点功夫;二是storyboard。storyboard可以让UI开发变得类似于产品原型设计,把众多的页面UI和跳转关系集中到一张大表中。虽然没有本质上解决ios在UI开发上的乏力感,但是storyboard至少极大的方便了开发人员理解页面跳转关系。这算得上是ios开发中为数不多的亮点。
纯粹从技术的角度来说,我真不希望ios做大,微软的技术解决方案不知甩苹果几条街。但没办法,广大开发者还指望着从ios这个最吸金的平台上多分一杯羹呢。

4.android
如果需要用一句话证明我写过安卓程序,我会毫不犹豫的写出:pixels = dips * (density / 160)
如果一句话不够,我会再加上一句: API 10 = Android 2.3
针对安卓的分辨率问题,广大开发者们已经不能吐槽得更多。我觉得和分辨率的碎片化相比,真正要命的是操作系统的碎片化。虽然官方强烈推荐使用安卓4.0的新控件,但是目前2.3以及各种奇葩机的市场占有率仍然让人眉头紧锁。作为我个人来讲,我宁愿用老版本的API自己动手画控件,也是万万不敢尝螃蟹的。
当然了,Java是个好东西。如果不是为了开发ios,应该鲜有人主动去学o-c。但是Java总归是有足够的群众基础的,在语言层面上对大多数人来讲几乎没有学习成本。成本主要存在于安卓测试机上了,因为谷歌给弄的安卓模拟器和wp、iphone模拟器相比实在是太过坑爹。据说在mac上的安卓模拟器运行会流畅点,不过我总觉得这是google的阴谋,逼得开发者们不得不买上一大把测试机。当然了,这点测试机的钱,对于IT巨头而言当然算不上什么,对于小团队来说就稍显麻烦了。由此又催生了一批专业的安卓APP测试公司,这里就不展开讲了。
安卓的UI开发有点类似于WP,但是在数据绑定上还是难以与之匹敌。对于9 Patch(9宫)图的原生支持也是安卓UI开发的一个亮点,在安卓的sdk工具包里专门有个工具来制作9 Patch图。ios上也有相应api来实现类似功能,但没有安卓这么方便。而WP更是完全没有提供对9 Patch图的原生支持。
之前在各平台很少遇到的内存泄漏,在安卓上以Out of Memory Exception(OOM)的形式大放异彩。虽然OOM的出现本质上还是由于APP的代码没写好,但我总感觉在安卓上出现OOM的概率比其它系统上高了很多,不知是不是我的错觉。
安卓的开发权限还是挺自由的,做开机启动、后台运行推送什么的,只要在程序包里标名权限并得到用户安装允许就行了。貌似wp和ios根本不允许开机启动,安卓的后台运行和推送相比于WP、IOS的推送机制也方便了很多,这些特性方便了开发者的同时,也为流氓软件留下了滋生的土壤。

最后,衷心希望HTML5早日一捅浆糊,在self和this之间纠结,在.count.size.length之间徘徊,这是人干的事嘛~

 

原文章地址:

从开发者的角度看待各移动平台 IOS/ANDROID/WP7/WIN8

【转】从开发者的角度看待各移动平台 ios/android/wp7/win8ost title的更多相关文章

  1. [译] 开发者角度,王道之论:Android 与 Windows Phone

    前几天,在codeproject搜索Silverlight资料,偶然看到这篇文章,耐心读了2遍,非常不错:文章通过访谈聊天形式叙述,2位主角目前在<斯法克斯国家工程学院>软件学院上学. 周 ...

  2. Web开发者的六个代码调试平台

    代码调试平台是Web开发者进行开发.测试.分享.协作和交流的网络应用,它们支持实时的编辑.预览HTML.CSS和JavaScript的客户端代码.这些代码调试平台最值得称道的地方在于,它们中的大多数都 ...

  3. 第二篇 :微信公众平台开发实战Java版之开启开发者模式,接入微信公众平台开发

    第一部分:微信公众号对接的基本介绍 一.填写服务器配置信息的介绍 登录微信公众平台官网后,进入到公众平台后台管理页面. 选择 公众号基本设置->基本配置 ,点击“修改配置”按钮,填写服务器地址( ...

  4. Web开发者和设计师必须要知道的 iOS 8 十个变化

    原文出处: mobilexweb   译文出处:罗磊(@罗罗磊磊)   欢迎分享原创到伯乐头条 喜大普奔,喜极而泣,喜当爹,随着iPhone 6和iPhone 6 plus的上市,ios 8终于在上周 ...

  5. 总结分享十大iOS开发者最喜爱的库 分类: ios相关 app相关 2015-04-03 16:43 320人阅读 评论(0) 收藏

    该10大iOS开发者最喜爱的库由"iOS辅导团队"成员Marcelo Fabri组织投票选举而得,参与者包括开发者团队,iOS辅导团队以及行业嘉宾.每个团队都要根据以下规则选出五个 ...

  6. 那些年一起用过的iOS开发利器之Parse

    阅读此文章需要对Objective-C和iOS有一定的了解,完全没有基础的朋友请先阅读<让不懂编程的人爱上iPhone开发>系列教程. 什么是后台服务(back-end service)? ...

  7. PNG使用技巧 PNG的使用技巧

    PNG的格式和透明度 这个Fireworks会比较清楚,打开Fireworkd优化面板,可以清楚看到png有3种不同深度的格式:png8.png24.png32. 其中,在优化面板选择png8,可发现 ...

  8. Android P Beta发布!最新版本抢先体验!

    在不久前结束的谷歌I/O开发者大会上,谷歌公布了下一个版本的 Android,也就是 Android P 的 beta 版本.Android P 将 AI 定位为操作系统的核心,并侧重于提供智能且简洁 ...

  9. 【阿里云产品公测】以开发者角度看ACE服务『ACE应用构建指南』

    作者:阿里云用户mr_wid ,z)NKt#   @I6A9do   如果感觉该评测对您有所帮助, 欢迎投票给本文: UO<claV   RsfTUb)<   投票标题:  28.[阿里云 ...

随机推荐

  1. php排序算法

    <?php//冒泡排序(数组排序) function bubble_sort($array){ $count = count($array); if ($count <= 0) retur ...

  2. 传统软件和SaaS,差异究竟在哪里

    这篇文章从创业起步阶段.产品形态和产品策略.市场竞争格局三个方面比较了中美 SaaS 领域的异同,在文章的最后,作者根据自己在 Box 的工作经历对在国内做 SaaS 的公司提出了四点建议. 我曾有幸 ...

  3. Delphi字符串简码

    从网上找的三个函数自己修改了下,在delphi7运行正常,unicode的版本不能用好像 输入:1abc天天 输出:1ABCTT unit UnitJM; interface uses SysUtil ...

  4. C++ 中堆栈学习

  5. Code[VS]1690 开关灯 题解

    Code[VS]1690 开关灯 题解     时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond   题目描述 Description:     YYX家门前 ...

  6. [Oracle] SQL*Loader 详细使用教程(2)- 命令行参数

    sqlldr工具   SQL*Loader的客户端工具是sqlldr,在操作系统的命令行下输入sqlldr,后面不接任何参数,将显示帮助信息如下所示(所有命令行参数的简单描述及其默认值),所以你并不需 ...

  7. error :ld returned 1 exit status

    额,被调用函数的名称与调用函数的名称写的不一致啊: 所以会出现 ld returned 1 exist status 好了, 问题解决了.

  8. C语言 数组类型与数组指针类型

    //数组类型与数组指针类型 #include<stdio.h> #include<stdlib.h> #include<string.h> void main(){ ...

  9. MongoDB 3.0以上版本设置访问权限、设置用户

    定义:创建一个数据库新用户用db.createUser()方法,如果用户存在则返回一个用户重复错误. 语法:db.createUser(user, writeConcern)    user这个文档创 ...

  10. 支持向量机(SVM)简介

    主要内容 一:SVM简介 二:线性分类 三:分类间隔 四:核函数 五:松弛变量 SVM简介 支持向量机(support vector Machine)是由Cortes和Vapnik于1995年首先提出 ...