Android系统架构
如该经典图,将android大致分为四层:Linux内核层、库和运行时、Framework层和应用层。
- Linux
android最低层最核心的部分,包含android系统的核心服务,包括硬件驱动、进程管理、安全系统等。
- Dalvik 与 ART
Dalvik包含一整套android运行环境虚拟机,每个app都会分配Dalvik虚拟机来保证互相之间不受干扰保持独立。
Dalvik特点:运行时编译。
ART特点:安装时编译。(5.X之后取代Dalvik)
- Dalvik支持已转换为.dex格式的java应用程序的运行.。
.dex格式:专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。
每一个Dalvik应用作为一个独立的Linux进程执行,在有限的内存中允许同时运行多个虚拟机的实例。独立的进程可以防止在虚拟机崩溃时所有程序都被关闭。
因为Dalvik虚拟机,Android开发者只需按照谷歌提供的SDK即可轻松创建APP,不需要顾忌硬件、底层驱动等问题,在每次执行应用时,Dalvik虚拟机都会将程序的语言由高级语言编译为机器语言,Dalvik依靠一个Just-In-Time(JIT)编译器去解释字节码,每次运行程序都需要做上述操作,将字节码编译为机器语言;所以很长时间以来,Dalvik虚拟机一直被用户指责为拖慢安卓系统运行速度不如iOS的根源。
- ART模式(Android Runtime),谷歌收购了一家名为Flexycore的公司,该公司一直致力于Android系统的优化,ART模式也是在该公司的优化方案上演进而来。
启用ART模式后,系统在安装应用的时候会进行一次预编译,在安装应用程序时会先将代码转换为机器语言存储在本地,这样运行程序时就不会每次都进行一次编译了,将提高执行效率。
RAM(random access memory)即随机存储内存,这种存储器在断电时将丢失其存储内容,故主要用于存储短时间使用的程序。
ROM(Read-Only Memory)即只读内存,是一种只能读出事先所存数据的固态半导体存储器。
-
Framework
Framework
-
Standard libraries
Standard libraries
- Application
如下图,分别为NDK和Java开发App的主要构成。
无论哪种App都有Android Mainfest文件、Dalvik Classes、Resource Bundle。
开发者应关注每个版本的SDK修改,从而提高应用的兼容性。
Android App组件架构
画重点!
android 四大组件:Activity、BroadCastReciever、ContentProvider、Service
activity负责向用户展示信息和处理结果,信息可以通过资源获取,也可以通过ContentProvider获取其他应用信息、Service从后台计算、下载处理的结果、BroadCastReciever获取广播信息。
通过Intent,组件之间进行通信,传递信息,交换数据,形成各自独立而又紧密联系的关系。
Context(受到万千佳丽宠爱有木有)
activity、service、application都继承自Context
创建context的时间点:创建activity、service、application
应用程序第一次启动,android会创建一个application对象,同时创建application context,所有组件共同拥有一个context对象,贯穿整个应用尽扯那个的生命周期,为应用全局提供功能环境的支持。
创建activity、service时,系统创建activity实例、service
实例的context对象。所以通过getApplicationContext()取得整个App的context
Android系统目录
/system/app/ | 系统app |
/system/bin/ | 存放Linux自带组件 |
/system/build.prop | 系统属性信息 |
/system/fonts/ | 字体 |
/system/framework/ | 系统核心文件、框架层 |
/system/lib/ | 几乎所有共享库文件(.so) |
/system/media/ | 系统提示音、铃声 |
/system/usr/ | 用户配置文件 |
/data/app/ | 用户数据信息,安装的app或者升级的app |
/data/data/ | app的数据信息、文件信息、数据库信息等 |
/data/system/ | 手机各项系统信息 |
/data/misc/ | 大部分WiFi、VPN信息 |