安卓的启动过程是这样子的
- ROM上电
- Bootloader引导程序启动
- Linux内核启动
- init进程启动
- Android系统本地服务启动(NS)
- Zygote进程启动
- Android系统服务启动(SS)
- Android系统主页面启动(HOME)
Android4.0之前的半杯是Linux2.6的内核
Android4.0之后的版本是3.X的内核,并且3.X的内核中含有Android源码,可以直接引导进入Android
Dalvik基于寄存器,JVM基于栈,Dalvik基于具体的CPU,通用性差,但是使用等长的指令,效率上要高
一个Dalvik应用就是一个Linux进程
Dalvik虚拟机执行.DEX文件,是.class文件经过dx软件处理后生成的
硬件驱动被分为内核空间和用户空间,Linux内核驱动程序运行于内核空间,HAL运行于用户空间
AIDL实现进程间通信:其他应用程序组件可以与这个应用程序的后台运行的Service进行交互, 另外,多个进程可以通过Service在保证进程安全的情况下进行交互
安卓中的ROM与PC不同,不是用的传统的EPROM或者EEPROM,而是用的NOR flash或者NAND flash,传统的ROM和NOR flash由于是字节寻址的,代码可以在ROM中直接读取并运行,但是NAND flash不是字节寻址,所以运行代码的时候需要先将代码拷贝到RAM里。ROM里固化的程序就是Bootloader,相当于电脑的BIOS
手机厂商常在Bootloader上加锁,防止刷固件
Linux映像分为两种,一种是未压缩的,image,一种是压缩的,成为zimage,后者要在执行前加上解压缩代码,速度慢,但是占用空间小,适用于嵌入式设备
安卓启动的过程:NS->zygote->SS->AMS->Lancher->home
NS层是安卓的系统内核层和应用层之间重要的通信桥梁,通过socket通信
Zygote:虚拟机实例的孵化器
SS是Zygote的第一个子进程,是安卓框架层的核心
SS会启动PMS PackageManagerService,由PMS来启动应用程序
Lancher会吧PMS启动的应用程序以快捷图标的形式展示在桌面上
Android系统升级的三种方式
- 数据线升级
- SD卡升级
- 在线升级