【转】从开发者的角度看待各移动平台 ios/android/wp7/win8ost title
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的更多相关文章
- [译] 开发者角度,王道之论:Android 与 Windows Phone
前几天,在codeproject搜索Silverlight资料,偶然看到这篇文章,耐心读了2遍,非常不错:文章通过访谈聊天形式叙述,2位主角目前在<斯法克斯国家工程学院>软件学院上学. 周 ...
- 从开发者的角度分析iOS应如何省电
从开发者的角度分析iOS应如何省电 说明 网上关于iPhone如何省电的文章很多.但是基本没有讲原理.而在生活中,很多人在使用iPhone中有着明显的错误的省电习惯. 本文从iOS开发者的角度,对iO ...
- Git学习系列之Git的功能特性(从一般开发者的角度和主开发者的角度来剖析)
不多说,直接上干货! Git的功能特性,从一般开发者和主开发者的角度来进行剖析. Git的功能特性: 从一般开发者的角度来看,Git有以下功能: 1.从服务器上克隆完整的Git仓库(包括代码和版本信息 ...
- 从安全的角度看待DNS
以前对DNS(Domain Name System)认识就大概的知道是一个提供域名解析服务,作为互联网的基础设施,任何一个IT人员都会或多或少都接触到DNS,随着我最近的接触不断提高,我发现DNS还是 ...
- 第二篇 :微信公众平台开发实战Java版之开启开发者模式,接入微信公众平台开发
第一部分:微信公众号对接的基本介绍 一.填写服务器配置信息的介绍 登录微信公众平台官网后,进入到公众平台后台管理页面. 选择 公众号基本设置->基本配置 ,点击“修改配置”按钮,填写服务器地址( ...
- Java开发微信公众号(二)---开启开发者模式,接入微信公众平台开发
接入微信公众平台开发,开发者需要按照如下步骤完成: 1.填写服务器配置 2.验证服务器地址的有效性 3.依据接口文档实现业务逻辑 资料准备: 1.一个可以访问的外网,即80的访问端口,因为微信公众号接 ...
- 工作不久的安卓开发者,他们是这样规划自己的Android学习路线
Android开发工作者工作不久的时候,会有一段迷茫期,觉得自己应该再学一点,却不知道从何学起,该怎样规划自己的学习路线呢?今天,我给大家梳理一下Android基础,就像建造房屋一样,要建造一座宏伟的 ...
- 作为一个.NET开发者,怎么看待和选择层出不穷的新技术,新架构?
经常在一些技术社区看到这些的问题,一个.NET开发者去求职,看到应聘的公司的技术栈还是比较老的ASP.NET WEBFORM的时候,希望了解未来会否使用ASP.NET MVC的时候,没有获得肯定答复, ...
- 0419如何利用关系角度看待SQL
转自http://www.open-open.com/solution/view/1389339225820 十步完全理解SQL 1. SQL 是一种声明式语言 首先要把这个概念记在脑中:“声明” ...
随机推荐
- (转)Decision Tree
Decision Tree:Analysis 大家有没有玩过猜猜看(Twenty Questions)的游戏?我在心里想一件物体,你可以用一些问题来确定我心里想的这个物体:如是不是植物?是否会飞?能游 ...
- HTTP协议 Servlet入门 Servlet工作原理和生命周期 Servlet细节 ServletConfig对象
1 HTTP协议特点 1)客户端->服务端(请求request)有三部份 a)请求行--请求行用于描述客户端的请求方式.请求的资源名称,以及使用的HTTP协议版本号 请求行中的GET ...
- System.Drawing.Graphics中比较重要的几个方法
方法 常见参数 绘制的图形 DrawLine 钢笔.起点和终点 一段直线 DrawRectangle 钢笔.位置和大小 空心矩形 DrawEllipse 钢笔.位置和大小 空心椭圆 FillRecta ...
- kali获得已经安装的软件列表
有人说是用dpkg -l ,也有说是用dpkg --get-selections. debian:~# dpkg -l|grep install|wc -l2678debian:~# dpkg --g ...
- IPC:Sockets
Please refer to http://www.cs.cf.ac.uk/Dave/C/node28.html.
- UVa 129 (回溯法) Krypton Factor
回溯法确实不是很好理解掌握的,学习紫书的代码细细体会. #include <cstdio> ]; int n, L, cnt; int dfs(int cur) { if(cnt++ == ...
- I.MX6 Android USB Touch eGTouchA.ini文件存放
/******************************************************************** * I.MX6 Android USB Touch eGTo ...
- windows远程桌面3389超时锁定时间调整方法(取消锁屏时间限制)
我们在管理服务器操作时,有时候需要长时间操作服务器,有时候稍微离开下倒杯水或接个稍长点的电话,就超时断开了很烦啦!有没有方法解决这个问题类?答案是有的!我只要在组策略里面,稍微修改下超时时间就可以了. ...
- TortoiseSVN中分支和合并实践
使用svn几年了,一直对分支和合并敬而远之,一来是因为分支的管理不该我操心,二来即使涉及到分支的管理,也不敢贸然使用合并功能,生怕合并出了问题对团队造成不良影响,最主要的原因是,自己对分支的目的和合并 ...
- 在FOR中使用close window,循环次数大于1就会报异常
在FOR循环中执行以下动作: 场景:1.打开页面A, 2.点击A中的链接打开新的window, 3.将driver切换到新window, 4.close window 5.再切换到页面A 时出异 ...