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. 从开发者的角度分析iOS应如何省电

    从开发者的角度分析iOS应如何省电 说明 网上关于iPhone如何省电的文章很多.但是基本没有讲原理.而在生活中,很多人在使用iPhone中有着明显的错误的省电习惯. 本文从iOS开发者的角度,对iO ...

  3. Git学习系列之Git的功能特性(从一般开发者的角度和主开发者的角度来剖析)

    不多说,直接上干货! Git的功能特性,从一般开发者和主开发者的角度来进行剖析. Git的功能特性: 从一般开发者的角度来看,Git有以下功能: 1.从服务器上克隆完整的Git仓库(包括代码和版本信息 ...

  4. 从安全的角度看待DNS

    以前对DNS(Domain Name System)认识就大概的知道是一个提供域名解析服务,作为互联网的基础设施,任何一个IT人员都会或多或少都接触到DNS,随着我最近的接触不断提高,我发现DNS还是 ...

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

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

  6. Java开发微信公众号(二)---开启开发者模式,接入微信公众平台开发

    接入微信公众平台开发,开发者需要按照如下步骤完成: 1.填写服务器配置 2.验证服务器地址的有效性 3.依据接口文档实现业务逻辑 资料准备: 1.一个可以访问的外网,即80的访问端口,因为微信公众号接 ...

  7. 工作不久的安卓开发者,他们是这样规划自己的Android学习路线

    Android开发工作者工作不久的时候,会有一段迷茫期,觉得自己应该再学一点,却不知道从何学起,该怎样规划自己的学习路线呢?今天,我给大家梳理一下Android基础,就像建造房屋一样,要建造一座宏伟的 ...

  8. 作为一个.NET开发者,怎么看待和选择层出不穷的新技术,新架构?

    经常在一些技术社区看到这些的问题,一个.NET开发者去求职,看到应聘的公司的技术栈还是比较老的ASP.NET WEBFORM的时候,希望了解未来会否使用ASP.NET MVC的时候,没有获得肯定答复, ...

  9. 0419如何利用关系角度看待SQL

    转自http://www.open-open.com/solution/view/1389339225820 十步完全理解SQL   1. SQL 是一种声明式语言 首先要把这个概念记在脑中:“声明” ...

随机推荐

  1. 【Codeforces】#345 Div1

    1. Watchmen1.1 题目描述给$n$个点,求曼哈顿距离等于欧式距离的点对数. 1.2 基本思路由$|x_i-x_j|+|y_i-yj| = \sqrt{(x_i-x_j)^2+(y_i-yj ...

  2. [ffmpeg 扩展第三方库编译系列] 关于需要用到cmake 创建 mingw32编译环境问题

    我在这里给出我编译的例子 cmake -G"MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=& ...

  3. C++ 空类默认产生成员函数

    class Empty { Empty(){...} //默认构造函数 ~Empty(){...} //默认析构函数 Empty(const Empty&){...} //拷贝构造函数 Emp ...

  4. ASP.NET的六种验证控件的使用

    C# 中的验证控件分为一下六种 :1 CompareValidator:比较验证,两个字段的值是否相等,比如判断用户输入的密码和确认密码是否一致,则可以用改控件: 2 CustomValidator ...

  5. [HNOI2006]超级英雄Hero

    这题一看就应该知道是二分图匹配…… 我记得有个类似的题有一个并查集的解法,但是我找不到了…… var i,n,m:longint; p:..] of longint; v:..] of boolean ...

  6. LeetCode Delete Node in a Linked List (删除链表中的元素)

    题意:给一个将要删除的位置的指针,要删除掉该元素.被删元素不会是链尾(不可能删得掉). 思路:将要找到前面的指针是不可能了,但是可以将后面的元素往前移1位,再删除最后一个元素. /** * Defin ...

  7. 如何创建,增加swap

    使用分区做为SWAP比较好,速度比文件的快,也不容易产生磁盘碎片所有应该尽量使用分区作为SWAP. 先说说使用文件做为SWAP吧:一.因为做为SWAP的文件,必须是连续的,所以需要使用dd命令创建:[ ...

  8. Wiz开发 定时器的使用与处理

    这只是一些代码片段,由于Wiz开发的资料实在不多,而且内容都不够新. 这里的代码主要参考Tools.Timer这个插件,但是由于内部实现的很多变化,Tools.Timer这个插件基本上已经无法使用了. ...

  9. WCF 学习总结2 -- 配置WCF

    前面一篇文章<WCF 学习总结1 -- 简单实例>一股脑儿展示了几种WCF部署方式,其中配置文件(App.config/Web.config)都是IDE自动生成,省去了我们不少功夫.现在回 ...

  10. GIS:揭开你神秘的面纱

    转自:http://www.cnblogs.com/gisangela/archive/2013/02/20/2918884.html#!comments GIS从出现到为人所知,只不过经历了短短的几 ...