注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

流风清音

挑战极限,超越无限!

 
 
 

日志

 
 

浅析Android  

2012-08-19 20:32:31|  分类: 天下杂侃 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

  近来,在众多自娱自乐的安饭的攻击下,我不得不恶补一下关于Android的知识,怎奈何百度百科的叙述实在是太专业了,菜鸟级别基本是看不懂的了。没办法,我只好转战各大论坛和贴吧了,经过这段时间深入浅出的研究,也总算是对Android有了一定的认识了。就我现在所掌握的信息而言,我用了一句话来总结Android系统:以开源保证封闭,以效率换取兼容。
 
图片

  先来解释下前半句吧。你以为Android是开放的吗?其实,Google采用了一系列的控制手段来保证每一部Android手机上都有它指定的软件和硬件规格。然而,他们同时又利用AndroidSDK里面的Apache许可证来大肆鼓吹Android是开放的。没错,Google的移动平台是当前最聪明的利用开源来驱动商业议程的实现。
 
  现在我们探讨Android到底有多封闭,尽管它外面包裹着Google“不作恶”的口号和Apache授权许可证模式。借用亨利福特在Model-T相关的书里的一句话:“任何人都可以自由挑选Android的颜色,只要那是黑色”(anyonecanhaveAndroidintheirowncolouraslongasit'sblack)。Android是一个绝好的商业案例——展现一家公司是如何用开源来赢得关注和社区参与,而且同时保持一个非常严密的商业运作。那么Google是如何控制着每台Android手机里采用什么服务、软件和硬件的呢?第一,封闭的评估流程。所有的代码评估员似乎都是Google员工,也就是说从社区提交的代码只有Google才有权力决定是否接受。第二,闭门的开发者社区。AndroidMarket是唯一一个拥有超过四万个程序并和每个手机OEM厂商都签有合约的Android程序商店。这个限制很要命,因为没有一个OEM厂商愿意发布没有Market的Android手机(天朝是另类)。当然,在Market上发布应用是个非常简单的事情,没有什么审批的步骤,这个和苹果的AppStore刚好相反。最后,就是Android商标。Google掌握着Android的注册商标和冠名权。任何想用Android品牌的厂商都需要得到Google的授权。简单的说:进Google的门,或者没有门。
 
  因此,我们应该意识到Android和WindowsMobile、MacOSX或PalmOS相比,并没有开放多少。Android是用开源来驱动商业议程的最聪明的案例之一。Android骨子里并没有我们潜意识里所灌输的那么多不作恶思想。
 
  接下来说说后半句的意思吧。Android,一个用linux内核作为底层驱动,用Java虚拟机跑的一个虚拟系统。它运行着一切看似美丽却落后技术的软件,要知道靠Java运行是非常占用硬件资源的。一个通过不断烧硬件低执行效率的系统,最终换来了Android软件的兼容,毕竟Java的兼容性是毋容置疑的。所以,说白了Android就是一个以效率换取兼容的系统。
 
  这样一来,我们就要从不同的角度去看待这个问题了,很老土的话就是Android系统既有优势也有缺点。那么,我先从缺憾说起吧。在此引用一下某论坛某友友的帖子的部分内容:“一个靠虚拟机跑的低效率系统就如同拖拉机,即便你改成4缸也变不了法拉利;而WP和IOS就如同摩托车,即便是单缸或双缸都能轻松甩你几条街。不过我倒是很期待8核的安卓机啊,因为我想看看8缸的拖拉机能否跑得过4缸的IOS和双缸的WP8……”我们知道,Java必须借助虚拟机(JavaVirtualMachine)才能运行,要运行Java必须要装JRE(JavaRuntimeEnvironment),而在Android上则叫做Dalvik。显然,这种方式带来的结果是用Java写应用程序再怎么优化也永远(注意是永远)比C、C++之类的慢上一个级别(比如ACM比赛是允许用Java的,但不可能有人用Java去参加ACM比赛),再加上PC上Java的图形接口Swing“神”一般的运行效率,使得很多人包括开发者对Java的印象都不是很好。所有程序都运行在Java模拟机上,而不是像IOS和WP7靠硬件直接引导,硬件资源消耗极大,所以靠一味地堆硬件,只会增加电池的负担。或许,“‘吃电老虎’只会让安卓很快走向衰亡之路……”也不全是危言耸听了。
 
  但是Java有它最大的好处(暂且抛开强大的,也是Java目前最主流的JavaEE不谈),完全面向对象,而且本身语法比C、C++大大简化,使得开发变得大大容易。对于很多情况来说,用开发效率换取运行效率还是值得的,Android选择Java同时自己做了个虚拟机进行优化,对于Android的推广也是起到了很大的作用的,而微软最近几年力推的.Net无论原理还是语法都像是照抄Java出来的。因此,如何看待开发效率和运行效率,也是问题的关键所在,不过因为这个涉及到很多专业知识,所以不便太过于深入研究。
 
  另外,纯语言而言,Java的执行效率确实不如C、C++。但这只是一方面,某友友的回帖如是说:“现今的硬件资源已经很充裕了,牺牲一点资源消耗,从而获得架构、安全、扩展、健壮等方面的优势难道不更好么?更何况如果runtime做得好的话,除了资源占用大点,效率方面基本没什么损失……”没错,这个观点也是有一定道理的。事实上,我们所知的.Net不就是这样么,加载的时候慢点,运行的时候并不慢。那么,牺牲硬件资源换取软件兼容究竟值不值得,这就要看我们站在哪个角度思考问题了。
 
  既然说到开发语言了,那我就继续啰嗦几句吧。目前来说,我是学习Java开发的,我承认Java的执行效率比C、C++低,不过我们要知道,编程语言是没有完美的,干什么活用什么工具就是了,但语言的使用范围却有巨大差异。从硬件角度说,使用范围最广的语言是C,因为C工具链的实现太简单了,电子系大二的学生也能往一个新的CPU上Port一个GCC编译器,然后就可以用C语言编程了。从软件角度说,使用范围最广的语言是Java,因为Java的实现太简单了,科学系大三的学生也能往一个新平台上Port一个JVM。Java可以运行在从智能卡(比如手机sim卡)到手机到个人电脑到大型服务器应用上。我想这是这个地球上最神奇的计算机技术了。
 
  所以,我们有理由相信,除此之外的其他语言都只是配角而已。如果你希望更多的了解硬件的工作方式,需要性能,或者需要精简的使用系统资源,或者希望产品有整体的成本优势,那就是C的价值。如果你希望应对复杂和多变的程序行为,应对庞大的系统体系,采用(甚至是可视化的)模型驱动开发,代码有非凡的重用能力,有海量的高品质代码可供参考,有海量的高品质类库和框架可用,有海量的代码检查工具和测试框架可用,有优雅的程序崩溃输出和调试方式,无论应对什么平台你都可以不变应万变,或者在混合部署的环境中仍然可以潇洒生存,那就只有Java能做到。
 
  因此,如果为了一些所谓的前卫特性,而去学习其他语言,那简直是浪费时间。为什么?因为如果他们真的具有一些优异的古怪特性,能被产业广泛的证实,无论是形式上的、还是性能上的,那么这个特性最终会出现在C或者Java里(脚本语言除外)。一个是计算机工业使用了40年的语言,一个是最近15年计算机工业最值得纪念的一笔。我们应该相信千千万万的程序员的选择智慧。
 
  实际上,最后那几段有点跑题的嫌疑了,我实在忍不住多说了几句,也是为了从侧面说明Android是具有正负两方面作用的。Android系统发展到今天,可以说是对手机行业有不可磨灭的推动作用。先不说其低廉的价格推动智能手机的普及,就是其两年内推动手机硬件从单核到双核,再到现在的多核,就经以令人感到其威力惊人。不过,值得大家一起深思的是,在这个发展过程中,Android自身所具有但从不承认的缺陷以及给普通消费者带来的误导,不然安饭们势必会眼高过顶,自以为Android是无所不能的系统和时尚潮流的代表,而极力吐槽其他诸如Symbian、Windows Phone甚至IOS系统。
 
  PS:偶然在某贴吧看到如下回帖:
  1楼:“换壳公司”和“虚拟系统”同样可恶,但老朽更鄙视后者…
  2楼:Java和C/C++相比,执行效率上是有些差,但是Java的入门门槛比C++低,可以吸引更多的开发者,这一点非常重要。
  3楼:这是山寨的机会啊!MTK、中微星,年底发布些低端Android手机吧!
  4楼:安卓已成为屌丝和山寨的代名词,满大街的山寨机就如同满大街的垃圾桶…
  ……
  评论这张
 
阅读(621)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018