目录

为什么Android开发都在意Framework底层知识

Android开发都在意Framework底层知识的原因:1、面试考察相关内容的可能性高;2、学习Android Framework本身就是有价值的。面试考察相关内容的可能性高是指,随着Android开发者越来越多,企业对Android程序员的筛选也有了更高的要求,尤其是考察Android Framework中各个组件的原理。

一、Android开发都在意Framework底层知识的原因

1、面试考察相关内容的可能性高

随着Android开发者越来越多,企业对Android程序员的筛选也有了更高的要求,考察对Android底层逻辑的理解和思考就是很重要的一个方面,尤其是Android Framework中各个组件的原理。Framework相关的知识是一个深层次的内容,有些面试官喜欢一直问到你答不上来为止,正儿八经的考察你的技术能力,这也要求Android开发工程师对相关知识有一个较为全面的认识。

2、学习Android Framework本身就是有价值的

很多公司的应用开发需要基于模块化、层次化、组件化、控件化来设计架构,它的基础就是建立在Android Framework框架的底层原理之上,学习Framework可以深层次的去解决安卓应用开发时遇到的一些难题,甚至不少公司都有设置专门的Android Framework开发岗位。

大家都知道目前初级的Android开发者已经趋于饱和,发展的方向无非就是进阶成为中高级Android开发,或者深入Android底层逻辑转向系统开发,大家可以选择一条路径去拓宽自己的深度和广度。

二、Framework底层相关概念

1、CIL——公共中间语言

CIL即Common Intermediate Language,公共中间语言。称其为公共的原因是不论是C#语言也好,VB.NET语言也好,C++/CLI语言也好,甚至是重新开发的一套以自己的名字缩写命名的语言,只要它期望运行的目标平台是.NET,在经过相应的编译器编译之后,所生成的程序集就是由CIL语言代码描述的。

但是CIL不是CPU可以直接执行的本地机器语言,这种语言还需要.NET运行时(.Net runtime)环境的支持,在执行之前,进行一个被称为Just-in-time(即时)的二次编译过程,才能转变成计算机可以识别的指令。

CIL不过是一种程序语言,只不过相对于C#来说,它是一种更低级语言,CIL是一种基于堆栈的语言,同时,它提供了class、interface、继承、多态等诸多面向对象的语言特性,因此它又是完全面向对象的语言。如果愿意,甚至可以直接编写CIL代码,并且使用CIL的编译工具IL ASM(IL Assembler,IL汇编程序)来对它进行编译。只不过,和大多数低级语言一样,这种方式会使开发效率会变得很低。

2、BCL——基类库

mscorlib.dll程序集,这个程序集中所包含的类库,即是BCL(Base Class Library,基类库)。从名字就可以看出来,这个类库包含的都是些最基本的类型,其本身已经与CIL语言融为一提了,为CIL语言提供基础的编程支持,以至于该类库已经成为了CLI标准的一部分,因此也可以说BCL中的类型就是CIL语言的类型,所有面向CIL的语言都能够使用它们。

3、FCL——框架类库

FCL(Framework Class Library,框架类库)。上面提到的BCL是FCL的一个子集。BCL中包含了与编译器及CIL语言关系紧密的核心类型,以及常见开发任务中都会使用到的类型。而FCL包含的内容极多,仅服务于一种应用场景的子类库就足够写一本书了,从功能上来看,可以将FCL框架类库划分成以下几层:

  • 最内一层,由BCL的大部分组成,主要作用是对.NET框架、.NET运行时及CIL语言本身进行支持,例如基元类型、集合类型、线程处理、应用程序域、运行时、安全性、互操作等。
  • 中间一层,包含了对操作系统功能的封装,例如文件系统、网络连接、图形图像、XML操作等。
  • 最外一层,包含各种类型的应用程序,例如Windows Forms、Asp.NET、WPF、WCF、WF等。

延伸阅读1:Framework简介

Framework即框架,它是一个语言开发软件,提供了软件开发的框架,使开发更具工程性、简便性和稳定性.NET Framework通过COM Interop(COM互操作)技术支持COM+和MTS。一个传统的COM应用程序能够调用一个.NET组件,同时.NET组件(在.NET中称为.NET Assembly)也能够调用一个COM组件。这一非常强大的双向互操作特性使你可以在应用程序中混合使用两类技术。

一站式研发项目管理平台 PingCode

一站式研发项目管理平台 PingCode

支持敏捷\瀑布、知识库、迭代计划&跟踪、需求、缺陷、测试管理,同时满足非研发团队的流程规划、项目管理和在线办公需要。