首页 > 移动平台 > 详细

Android设计意图

时间:2015-10-12 22:46:39      阅读:323      评论:0      收藏:0      [点我收藏+]

# 标签: 读博客


这是我的,看了android的多个版本的部分源码后的体会:

再次把我将要负责的模块源码看个一遍,这回看的又快又顺,发现“代码是写给看的懂的人看的”,同时也发现,看代码要站在特别高的层次,或者很抽象的层次,才会稍稍轻松些,而且能理解作者的意图,并且真要深究代码的时候,操作系统(磁盘管理,内存管理,进程调度)的基础,以及设计模式的基础,以及linux的一些设计思想(什么uid,gid,selinux之类的,特别是它的权限&安全思想)都会在这时候帮助你看源码又快又简单。而且我有很强烈的预感,你看第一个模块反复了几遍才稍稍轻松些,后面第二个还会有点儿磕磕碰碰,但是那之后的第三个第四个将会特别容易(解决问题可能还要拔高能力)。因为这东西是人设计的,那人的那一套设计理念你全明白了,后面还有什么好怕的呢?搞技术最终还是搞人。逃避不了的是对别人思维的窥视。虽然到目前为止,这些还是我的猜想,然后我觉得,就在两周内,我就能验证或者完善这个理论,或者推翻它。


设计思想是少的(仅有的),也是主干,所以抓起来比较快,然而实现方式多种多样,这就是为什么执着于看完整模块的每块代码那么难,而看懂流程,那么容易的原因了。复杂的东西是在实现上。所以看懂设计就能搞懂一整个模块这种说法是很天真的。我只能说懂设计,不懂实现,依旧困难。这就好像一句成语:纸上谈兵。


咱们还是来看看作者怎么说的吧:(原文作者才是真正的高手!)


本文转载整理自:http://blog.csdn.net/maxleng/article/details/5471557



分析方法论探讨之设计意图

为什么要研究Android,是因为它够庞大,它够复杂,他激起了我作为一个程序员的内心的渴望,渴望理解这种复杂性。我研究的对象是作为手机开发平台的Android软件系统部分,而不是Dalvik虚拟机本身。

作为一个从其他平台装接过来的程序员,要从事Andoid平台系统开发,我的关于手机平台上积累的知识已经不能满足需要了,Android为我们带来了大量的新名词,ActivityManifestINTENTServiceBinderDalvik虚拟机,FrameworkLinuxNavtive JNI.....。通过在源代码,在开发社区,在开发博客,甚至在招聘过程中,我不断的寻求Android是什么。经过一定时间的沉淀,我慢慢的理解到Android不仅仅是一类手机的总称,不仅仅是一个手机开发平台,不仅仅是一个虚拟java操作系统,不仅仅是一个开发社区,一个开发标准,不仅仅是一堆代码,Android已经成了一个新的潮流。

代码多,系统复杂,纵观社区中Android的研究者,一开始从源代码分析Android就走向迷途,不断的跋山涉水,向纵深冲刺,最终脑袋堆栈不够用,迷失在开始的旅程,或者挂在半途中,鲜有通达者。我感觉到大部分的研究者总是忘记站在高山上向下望一望设计者的意图,一味的随着代码的控制流走入繁杂的谜团,陷入到复杂性的深渊。

我的研究分析是从设计者的意图出发,从抽象的甚至从哲学的高度,从最简单的系统原型开始,从设计猜想开始,而不是一开始就从代码分析展开。首先理解Android大的运行框架,主干流程,系统原型,之后再用源代码分析充实之。当然我这里的设计者意图并不是真正的Android设计者意图,而是我以为的Android设计者意图。

要理解设计者意图,就需要抽象。我们需要在哲学意义空间中去考虑系统的描述,即系统在本质上要表达什么。在逻辑空间上去考虑系统基本构成和动态结构。从现实到虚拟对象的映射去理解系统对象的组成在从数据流的角度分析数据的产生者和消费者之间作用关系从控制流的角度去分析对象之间的交互关系从函数调用去分析具体的层次关系

 

在系统设计上,原型是最能表达哲学空间和逻辑空间中系统本质的东西原型是事物本质的第一层体现我以为任何复杂的系统都有一个简洁的系统原型,都有它简洁的意义。系统原型是设计者意图的第一体现,所以我们需要从几个方向上去提炼系统原型:

1从系统本质和基本原理出发

2从分析系统数据流和控制流出发

 

从设计者意图出发,得出系统原型,提取到大的逻辑结构和系统构成是第一步。之后我们可以从设计者的角度考虑系统猜想系统设计,为什么要这样设计,为什么要有这些构成。这样的基本原型是什么?系统的限制是什么,应用场景有哪些,有些设计的引进还是系统收敛性而为之呢。我们还可以从代码痕迹上去分析,这些概念是如何的得来的?从一定的抽象和高度去理解这些问题,遵循系统原型出发之原则,在深入分析代码的时候,就不容易陷入细节中。我们就可以随时跳出来想,这些代码在整体上载表达一个什么概念,在描绘一个什么逻辑,他要构成一个虚拟层吗?他是在管理这个硬件吗?他在虚拟这个对象吗?他在构建管理机构?还是在构建一个对象管理?空间管理,为了快速?引入了什么样的复杂算法,实际上的原型算法应该是什么样的?

只有深入到这个抽象层次,我们才能很好的把握住系统的每一条线,每一个对象的意义。只用从原型出发,我们才能把握住这个系统的实质所在,在干什么?他要表达什么?设计者为什么要这样想?最终极的想法是什么?这样,代码分析就变得简单明了,读代码就变成了是在印证猜想,修正方向。



你以为看代码是什么呢?

我以为是,先去掉枝干,找出主干(本质),之后再看枝干。

实际上,看完原文作者的思考,才发现“我以为的”很幼稚。作者一句话就说明白了:读代码就编程了是在印证猜想,修正方向。


关键词:原型(出发)

android作为一个完善的系统,它也是逃脱不了OS的本来面目,依旧是要做IO管理,内存管理,文件管理等等,从这个意义上讲它实际上是将一个简单系统原型,再丰富,再构造,然后主干是没有变的。(实际上他搭建在linux上,只能说是一个用户态的操作系统)

一个简单的例子就是,你看PMS,它安装apk,这到底是什么样的一个过程呢?

apk是一个文件,所以在对于系统还是非系统apk的管理,就是文件管理(不同的目录拥有不同的权限),安装的过程不过是把磁盘文件读入内存的过程,其中的组件信息保存在内存中的过程(具体说是定义的数据结构),也就自然涉及到了内存管理,并且只能说是搭上了内存管理简单的边儿。


关键词:抽象

抽象一方面可以化繁为简,直达本质;另一方面,抽象意味着站的层次也就高起来,



不说太多,更多的思考,需要我更多的阅读,先这样咯。(回家再把这文章读5遍,一周后再来读,反复读)


扩展阅读: 复旦大学教授的《操作系统之哲学原理》


merlin

2015/10/12

Android设计意图

原文:http://my.oschina.net/wizardmerlin/blog/516050

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!