1.1安卓的发展与简介

       安卓并不是Google创造的,而是由Android公司所创造,公司于2003年在美国加州成立,该公司的创始人是Andy Rubin,该公司2005年由Google收购注资,并组建开放手机联盟。

       2007年11月5日,Android 1.0操作系统发布,当时并没有赢得广泛的市场支持。2009年5月,Google发布了Android1.5,这个版本功能强大,吸引了大量开发者的目光。目前,安卓已经成为一个重要的手机操作系统,市场占有率远超其他系统。

1.2 Android系统架构

1.2.1 Linux

       Linux层,是安卓最底层、最核心的部分。当我们打开手机Setting,选择About Phone选项,这一选项所显示的内核版本,就是我们所使用的Linux内核的版本。Linux层包含了Android系统的核心服务,包括硬件驱动、进程管理、安全系统,等等。

1.2.2 Dalvik与ART

       Dalvik包含了一整套的安卓运行环境虚拟机,每个app都会分配Dalvik虚拟机来保证互相之间不受干扰,并保持独立。它的特点是运行时编译。打个比方,就像是买了一辆折叠自行车,平时是折叠的,只有骑的时候才需要组装起来用。在Android5.X版本开始,ART模式已经取代了Dalvik,ART采用的是安装时就进行编译,以后运行时就不需要进行编译了。这就好比买了一辆组装好的自行车,直接就可以骑车。当然,对在其虚拟机环境中运行的大部分app来说,它们都是运行着同样的代码。

1.2.3 Framework

       Framework其实可以简单的理解为一些API的库房,android开发人员将一些基本功能实现,通过接口提供给上层调用,可以重复的调用。
       我们可以称Framework层才真正是Java语言实现的层,在这层里定义的API都是用Java语言编写。但是又因为它包含了JNI的方法,JNI用C/C++编写接口,根据函数表查询调用核心库层里的底层方法,最终访问到Linux内核。那么Framework层的作用就有2个。
       (1)用Java语言编写一些规范化的模块封装成框架,供APP层开发者调用开发出具有特殊业务的手机应用。
       (2)用Java Native Interface调用core lib层的本地方法,JNI的库是在Dalvik虚拟机启动时加载进去的,Dalvik会直接去寻址这个JNI方法,然后去调用。

这 2种方式的结合达到了Java方法和操作系统的相互通信。

1.2.4 Standard libraries

       Standard Libraries的详细版,这里包含的是Android中的一些标准库,所谓标准,就是开发者在开源环境中可以使用的开发库

1.2.5 Application

       如下两图分别表示了使用NDK开发和Java开发的App的主要构成。可以看出,不管那种App,它们都有Android Manifest 文件,Dalvik Classes,Resource Bundle这几个东西,相信解压过Apk的朋友应该注意到了,这些就是我们解压Apk后的文件。

       对于开发者来说,与Android系统最直接的接触就是SDK,应用开发者应当关注每个版本的SDK修改,从而提高应用的兼容性,如果站在Android设计者的角度上来看整个Android的架构,设计者希望Android的架构层能够起到承上启下的功能,让应用的各个组件之间解耦,并通过框架来进行统一的调度,管理。

1.3 Android App组件架构

       在应用层,Android的App组件架构,痛就是我们所说的四大组件,指的是Activity,BroadCastReciver,ContentProvider和Service,它们是构成一个AndroidApp的最基本元素。

1.3.1 Android四大组件如何协同工作

       Activity作为人机交互的第一界面,负责向用户展示信息和处理结果,而这些信息的来源,可以是通过资源获取,也可以是通过Conten Provider 来获取其他应用的信息,或是Service从后台计算,下载,处理的结果,当然也可以是通过BroadCast Reciver获取到的广播信息。同时,Android系统还提供了要给信使——Intent,作为信息传递的载体。组件与组件之间通过Intent来通信,传递信息,交换数据,正式通过这样要给方式,四大组件形成了各自独立而又紧密联系的关系,让整个Android系统“活”了起来。

1.3.2 应用运行上下文对象

       Android系统中的上下文对象,即在Context中,为我们封装了这样一个“语境”。Activity,Service,Application都是继承自Context。

Android应用程序会在如下所示的几个时间点创建上下文Context。
(1) 创建Application
(2)创建Activity
(3) 创建Service

       不难发现,创建Context的时机就是创建Context的实现类的时候。当应用程序第一次启动时,Android系统都会创建一个Application对象,同时创建Application Conetext,所有的组件都共同拥有这个Context对象,这个应用上下文对象贯穿了整个应用进程的生命周期,为应用全局提供了功能和环境支持。
       而创建Activity和Service组件时,系统也会给他们提供运行时的上下文环境,即创建Activity实例,Service实例的Context对象。所以在Activity中获取Context对象时,可以直接使用this,而在匿名内部类中,就必须指定XXXActivity.this 才可以获得该Activity的Context对象。
      当然也可以通过getApplicationContext()方法来获取整个App的Context,但是通过getApplicationContext()方法获得的是整个应用的上下文引用,这与某个组件的上下文应用,在某些时候还有有区别的。

1.4 Android系统目录和Android Studio文件目录

       在Android手机里,系统的目录结构与源代码目录结构还是有所不同的,我们通过ADB连接Android设备,通过Linux的ls命令查看Android系统的根目录,其中/system和/data是开发者非常关心的两个目录:

Android Studio环境下的文件目录结构:

更多相关文章

  1. Android应用程序框架层和系统运行库层日志系统源代码分析
  2. 12本最棒的Android开发电子书强力推荐
  3. Android组件及UI框架大全
  4. Activity and Task(二)
  5. Android图像处理简介の使用内置Camera应用程序进行图像捕获
  6. Android学习心得之二——Android系统架构图及简单的系统架构介绍
  7. 10个常见的 Android(安卓)新手误区
  8. 【转官方】Android(安卓)ADB调试命令、支持的命令、ADB文档
  9. 五年之内,Android(安卓)或将被取代?

随机推荐

  1. jshint在gulp中的使用
  2. 昊园恒业等中介捆绑网贷平台 分期交租暗
  3. 工信部官宣!代码托管平台Gitee要成为中国
  4. Steam上架多人在线“捉奸”游戏:可扮演丈
  5. 全球顶尖大厂程序员恶意报复公司“删库跑
  6. 新插件推荐 | 一边看Netflix电影,一边同步
  7. 面试题真的那么重要吗
  8. 使用 Docker 搭建你的Wiki(TiddlyWiki)
  9. 那些Chrome不为人知的高效隐藏技巧,让你的
  10. B站新出了一个超好玩的实用功能,我不会是