Androi“.NET研究”d整体印象

  很多人觉得Google能做出Android本身就是一个很了不起的工作过程,真的是这样吗?正好在Android上花过半年时间业余研究,从上到下还算是比较熟了,就说说我的印象吧:

  1. 内核

  以开发用机G1和Sapphire做例子,内核部分Qualcomm的那部分初始工作最重要(但也称不上大项目),Google的几个mechanism实际上工作量很轻、和类似目的的成熟组件比实际上都是超级简化版,设计的也有不少有欠考虑的地方。

  lower memory killer多么简陋就不说了,另一个差劲的设计就是缺乏管理的WakeLock【1】,遍布若干层的这玩意加上我个人最恨的那些没事醒着等待中断的内核代码,无论哪个地方一个小bug,就可能让你的手机待机超不过仨小时。【2】

  不是说不能往内核里加东西,也不是说一出手就必须惊天动地,关键是不能一拍脑门子想出个方案就上。Android对于内核的改动,很多类似地方的设计都缺乏整体思路,与其说是一组设计,不如干脆说是一堆hack来的确切;所幸Google在这这里干的活不多。

  2. 中间层

  能把这么多不同的开源项目粘一起确实是个费心的工作;不过说到具体的活儿,基本上就是因为license和手机环境的设置,照着别人代码抄一遍,掏空一些逻辑,换上一些逻辑。这一块主要是麻烦事儿很多:从总体上来看,这些麻烦还是被Google较好地控制住了的。

  但一些组成部分的选择还是存在不小的疑问:如媒体框架,我不知道Google怎么想的,非去买PacketVideo的。估计是这公司和Qualcomm有传统友谊?总而言之自己没信心上海闵行企业网站设计与制作color:white;' href='http://www.93tj.com'>上海闵行企业网站制作做也就算了,买也不买个好点的;弄这么个伪面向对象的丑陋的庞然大物,基本上每次新版Android推出都是让手机能正常运转的障碍:太难挑bug了,以至于Google自己都懒的调好。

  我个人的认识是,Google在这个层面的工作虽然已然不错,但缺乏真正的精耕细作。在工上海网站建设程上这或许是合理的,发布之后可以回过头慢慢揉合。但这种发展方式必然要求你有很好的上层抽象,不影响上层建筑。于是问题就变成:Google做到了吗?

  3. 运行时引擎

  说白了就是Dalvik这部分了。这个虚拟机基本上是2000年以后最糟糕的一个虚拟机,而且做这个放到21世纪也没什么技术含量了。说实在的如果说重量级程序员最多需要两、三个足够了,打杂的也不需要几个;很多时候咱们平时不会自己从事这个方面的开发,不是说这个工作就一定是什么难以逾越的大山。

  这个部分说白了又是一个照例子抄的活儿,却做的无比的落后,快赶上Python那个解释器的水平了。不过我相信HTC之类的厂商一定也有他们自己的想法:我发现HTC在这个部分加入了自己的一些内存管理逻辑,想必是Google又让他们的在某些情况下郁闷了吧呵呵。

  我的一个问题是,为什么不更改V8去适应强类型呢?应该不是技术上的问题,而是公司内部统筹安排导致的工作成果和人员不能重用吧。在Android刚推出的时候,我就看到过一个多媒体应用的开发者抱怨,说Android处理XX的速度比Nokia的J2ME还慢,不得不写Native代码,想想看,Nokia上海徐汇企业网站设计与制作用的可是更垃圾的CPU!

  4. 整体运行时环境

  说起来第一就是Java类库了,这部分也基本上是照抄加简化,否则也不至于让Oracle抓着把柄。实现Java类库这方面,我的感觉,就是你要把这部分工作放中国来,5000~7000的程序员雇上个20来个,很可能3~5个月就能做出Android 1.5的质量了。这部分Google的实现存在一些问题以前提到过,不过都是些容易改善的。

  多出来的是界面层、进程内外通讯、功能的配合和不同应用互操作这部分,以及整体上有一组适用于移动嵌入式环境的策略及对应的设计实现。其实这多出来的部分才是Android的核心,上面三个部分虽然更“底层”,却是服务于这一层次的目的的。(设计一旦确定,以Android的方案来说,其难度和工作量都不大)

  很遗憾的是如果仔细斟酌,却会发现Google方案在一到具体应用上漏洞百出。其中一部分牢骚在我上篇文章里提到过了。其他的话题比较大了,很难一句话说明白。不过如果站在开发者角度,并仅仅在Java层进行开发的话,中肯的说除了Java本身带来的缺点和一些细节,基本上还是和ASP.NET 1.1这类东西在一个水平线上。

  5. 纵观各子系统

  周边输出子系统虽然相对不重要但很说明问题,比如notification要决定LED灯一类的表现,开始的设计就过于具体的服务于G1/Sapphire,导致厂商有了其它设计的话,全都按自己的方式四处瞎写代码,完全破坏了原有的安排。但人家厂商也是有苦难言:你压根就没给人家一个合适地架构和接口。

  输入子系统也有类似的问题,虽然现象不同但它设计的也固若金汤铁桶一般。你如果想从Java层以下,内核层以上自定义一些行为,又不能够或者不想硬改代码(改了Android升级了你还得同步),除了挂钩子,唯一一条出路就是对内核动手了。天杀的,我宁可Google设计的时候能多考虑些我痛骂过得方法论了..

  网络子系统的话,已经有的TCP/IP栈肯定是没问题了,VPN之类的弄点开源代码改吧改吧实现的也没问题了,可是启用WIFI分配地址神马的时候,居然沦落到用脚本钩下环境变量用作通知,让人怀疑设计神马的都是浮云... 我寨威武!蓝牙子系统也拿的是套开源方案,按内行(就不说是谁了嘿嘿)的话,恨不得自上海企业网站设计与制作己上手重新实现一下。

  图形子系统正常使用不会碰到什么麻烦,看了看相关部分的代码,最主要的问题是来自接口过于简陋,对各种情况估计不足,出现bug的时候厂商就只能见招拆招了。比如图像缓冲和摄像头传回数据之间的大小不和,其结果可能是相当诡异而不是有个明确的接口甚至约定来处理这种情况(记住摄像子系统的接口也是被Android设定和限制的)。

  内存子系统,传统部分我没有太多的疑问,关键在于设备特定内存上【3】。这部分的设计简洁、但却缺乏更多的考虑。比如这些特定内存是被鼓励分门别类的管理;这种设计导致这种设备特定内存在一些机器上不够用,以至于可能无法发挥芯片最大能力。【4】

  多媒体子系统整体还是比较清晰和简单的,而且似乎也没简单到了不够用的地步(我对什么是好的多媒体子系统毫无经验)。不过默认下挂的OpenCore多媒体框架,前面已经提到过了,深恶痛绝。不知道Google自己的那个框架现在成熟了没有,什么时候换上,还有....会不会更糟糕,T_T

  Camera子系统第一个版本接口及定义就很差劲,说它将将够用都是夸它了,第二版也没好到哪儿去,跟内存子系统、图形子系统和多媒体子系统真可以说是分庭抗礼对着干。一些配合设计的也是莫名其妙,比如一些数据不是由上层逻辑完全控制上海企业网站制作的,而是由底层某个接口暴露出去然后直接在台面底下转帐给别的子系统。这不,第三版又来了。

  声音子系统呢,我个人没碰到过什么麻烦,最基本的应用本身也比较简单,就是从中间层走到内核去;有硬解码什么的在高通方案里转内核给硬件负责了;不过我想这个子系统的内行一定不满意,因为首先用户就有不满意的:声音有延迟。

  我觉得最好的应该是传感器子系统,为什么这么说?因为我从来没感觉到来自这方面的问题 :)。不知道以后传感器种类进一步增加的话会怎么样,想必Google现在也更有经验了吧。

  总结

  把所有方面总结一下的话,基本上稍微有有复杂性的部分Google都是绕着走的,凑在一起以后也不好好适配,很多地方缺乏一致性。然后无论是买还是拿来或者自己决定的事情,拍板经常拍的缺乏仔细考虑。大不了永远的beta慢慢改呗..真是服了。

  当然,整个上海徐汇企业网站制作系统有几个子系统的接口无论好坏毕竟需要用脑子设计,还有整合、除错、周边工具的工作量,如果想达到能推出、广泛使用的地步,光一个十来人的小组肯定不够的。但作为这样一个众口称赞的大型企业,动用那么多人力物力,弄出这样一个“操作系统”,真有点对不起Google一贯给自己渲染的光辉形象了。

  其实Android本来就不是“从头”来的项目,我想倒是因为Google实际上有一切大公司的弊病还缺乏传统操作系统开发公司的优势,所以在Google介入后设计合理程度和质量才这么差。

  注【1】:顾名思义,这东西是防止手机进入休眠状态的一个锁,即便是官方ROM都曾经出现耗电量剧增的现象,大多都是这个锁的使用导致的问题。

  注【2】:事实上整个电源管理这块,在Android刚推出时就被这方面资深的第三方开发人员痛骂不是没有道理的。

  注【3】:虽然原因不同,但为这个内存设备驱动,Linux的一个核心人员几次拒绝了Android提交的代码,属于Android最终被Linux扫地出门的导火线之一吧。(在这个问题上我并不完全支持内核小组)

  注【4】:想想看本来能用的内存在Android下却只能闲置,就能理解这个问题了。比如在MSM7200a方案上,分配给Camera和DSP的空间在大多时候被浪费,而mdp操作却只能使用非常有限的物理内存;反过来DSP也不能使用本来设计使用的空间,于是VGA视频压缩就彻底被取消了。

  P.S. 没想到能写出这么多,其实最近时间有限,好久没有碰Android了。写下的基本上都是我印象比较深的,肯定还有其他问题没有提到。不过Android的意义,不仅仅是因为它本身是开放的,更多的它让手机开始开放。虽然这和BootLoader加密加得不够好也有莫大关系,但无论如何这也是一件好事。

时间: 2024-10-11 01:58:02

Androi“.NET研究”d整体印象的相关文章

Androi“.NET研究”d 源代码结构

简介 在使用Andriod SDK进行应用程序开发的时候,我们需要对源代码进行调试,有可能需要进入到某个Android API函数内部进行跟踪调试.但是,如果目标版本的SDK没有关联对应版本的源代码的话,就会提示你找不到源代码. 图:找不到Android源码的提示 我们都知道Android系统是一个开源工程,在网上可以下载到源代码.一般在网上搜索一下,就会找到各种下载源代码的方法,比如使用Git和Repo,android源代码下载的网址是http://android.git.kernel.org

Skia引擎API整理介绍(skia in Androi“.NET研究”d 2.3 trunk)

序 通过google, baidu,我们都很难搜索到关于skia引擎方面的文档,skia的官方wiki(http://code.google.com/p/skia)也只有寥寥无几的文字简单介绍了SkCanvas, SkBitmap等几个主要的class,我通过分析源代码,查看jni接口对skia引擎的封装,总结和翻译了下面的一些文字,希望对想在Android平台进行native画图的朋友有所帮助,当然,你也可以直接使用OpenGL来画图. Skia引擎在android源代码库当中的位置 头文件(

Androi“.NET研究”d如何在三年时间里征服移动世界的

摩托罗拉Droid手机的出现被大多数人认为是Google在移动市场上的转折点 人们很容易会忘记,其实并不是很久以前,还没有人相信Android和我们的生活会有多大关系. 毕竟,Android的市场爆发也仅仅是在过去的一年里才真正开始的,大概也就是2007年秋天它的首次露面后的两年后.根据ChangeWave公司调查报告,今年上海徐汇企业网站设计与制作一月以来,Android在移动操作系统上的市场份额已经翻了一翻,截止到2010年第三季度,所有销售的智能手机中高达44%的设备是使用的Android

厦门印象:第三届中国站长大会侧记

一.前面 第三届中国站长大会刚刚全部结束了,终于回到了久违的房间 时间是2007年4月22日0时29分 紧凑的安排,站长们热情的交流和代理公司.某些网站BD.联盟们近乎疯狂的相互串连交织着,大会结束了 套用一句大家从小就熟悉的话:这是一次成功的大会,一次胜利的大会 坐在台下的我,不时地把这次的站长大会与我们去年3月举行的首届英雄会做着比较,更在琢磨下个月中旬要在重庆举办的第二届英雄会能从中得到哪些启发. 明天开始,关于这次大会的若干情形,我会以图片加文字随笔的形式记录整理下来,与大家分享. 这是

用户研究:手机QQ音乐播放器流失用户研究

文章描述:手机QQ音乐播放器流失用户研究. 大量的用户流失给我们的产品带来极大的挑战,用户为什么流失?流失之后去哪儿了?怎么挽留现有用户?怎么"召回"已流失用户?本文以"手机QQ音乐播放器流失用户研究"为例,谈一下自己的理解,供大家参考. 一.先把相关术语搞清楚 有些术语团队内部之前会有定义,没有错误的话,只需要理解和延用即可.有些术语团队第一次接触,需要先进行定义,经过团队内部一致认同之后,方可进行后续工作. 以手机QQ音乐播放器为例,产品侧之前就定义好了如下术语

《星际争霸2》人工智能研究环境 SC2LE 初体验

1 前言 2017年8月10号,DeepMind联合暴雪发布了星际争霸2人工智能研究环境SC2LE,从而使人工智能的研究进入到一个全新的阶段.这次,研究人工智能的小伙伴们可以边玩游戏边做研究了. 为了让更多的朋友了解SC2LE研究环境,我们在第一时间对其进行安装测试,并对DeepMind发布的pysc2代码进行分析,初步了解基于pysc2的RL开发方法.下面我们将一一进行介绍. 2 测试使用设备 Macbook Pro 13inch (MacOS Sierra) Alienware 13inch

用户为何流失—流失用户研究方法及流程

大量的用户流失给我们的产品带来极大的挑战,用户为什么流失?流失之后去哪儿了?怎么挽留现有用户?怎么"召回"已流失用户?本文以"手机QQhttp://www.aliyun.com/zixun/aggregation/9366.html">音乐播放器流失用户研究"为例,谈一下自己的理解,供大家参考. 一.先把相关术语搞清楚 有些术语团队内部之前会有定义,没有错误的话,只需要理解和延用即可.有些术语团队第一次接触,需要先进行定义,经过团队内部一致认同之后,

如何利用视觉元素有效传达信息?

  在Elaine McVicar移动端设计系列文章的最后一节中,我们将共同探索在移动应用中设计师应通过哪些视觉元素来有效传达讯息. 为了利用平台化的功能,历史上第一批移动网站不得不在很多方面做出"让步",因此远达不到"佳作"的水平.而如今,功能更加完备的设备让我们有机会打造出更具视觉吸引力的设计,这些设计不仅能够刺激和吸引用户,更能够提高用户体验的实用性.不过,机会的出现同时也伴随着挑战. 首先我们来看如何针对移动设备的物理制约进行设计(包括各项最佳实践),然后聊

Web设计核心问题3:为用户设计(3)

web|设计|问题  3.3 用户的共同特征 不存在共性的人,但是人们一般有相似的物理特征.大多数人看到相同的东西,能够记忆,对刺激作出相同的反应.但是记住,人是各不相同的.有些人可能有很好的视力,而有些人则很差.有些人能够记住几百条链接并且能够快速地过滤它们,而有些人在面临多于两个选项时就无法处理.有些人的反应速度很快,而有些人则很慢.但是,就像Web设计的其他方面一样,应该首先着眼于共同点,并确信也考虑了差异.我们首先考虑用户的共同特征如视力.记忆力和对刺激的反应. 视力 首先考虑用户如何从