Android系统架构
基础知识
Android系统架构的五层结构
Android系统架构从上到下分为五层:
-
应用层(Applications)
- 系统预装应用
- 第三方应用
- 用户界面层
-
应用框架层(Application Framework)
- Activity Manager
- Window Manager
- Content Provider
- View System
- Resource Manager
- Notification Manager
-
系统运行库层(Libraries & Android Runtime)
- 系统C/C++库
- Android运行时环境
- ART/Dalvik虚拟机
-
硬件抽象层(HAL)
- 为硬件提供标准接口
- 屏蔽底层硬件差异
-
Linux内核层(Linux Kernel)
- 进程管理
- 内存管理
- 安全系统
- 驱动程序
面试题
1. Android系统架构各层的作用是什么?
答案:
-
应用层:
- 提供用户可直接使用的应用程序
- 包含系统自带和第三方开发的应用
-
应用框架层:
- 为应用开发提供各种API
- 管理应用组件生命周期
- 提供UI组件和资源访问能力
-
系统运行库层:
- 提供核心库功能
- 负责应用程序的运行环境
- 将Java字节码转换为本地机器码
-
硬件抽象层:
- 将硬件访问接口标准化
- 使上层应用无需关心具体硬件实现
-
Linux内核层:
- 提供底层核心功能
- 实现硬件驱动
- 管理系统资源
2. ART和Dalvik的区别是什么?
答案:
-
编译方式
- Dalvik:JIT(即时编译)
- ART:AOT(预先编译)+ JIT(混合编译模式)
-
性能表现
- ART性能更好,应用运行更快
- 但ART需要更多的存储空间
-
垃圾回收
- ART的GC更加优化
- 暂停时间更短,更少的内存碎片
-
兼容性
- ART完全兼容Dalvik的应用
- 从Android 5.0开始默认使用ART
3. Android系统启动流程是怎样的?
答案:
-
按电源键
- 引导芯片从ROM加载引导程序
-
Boot Loader
- 引导程序加载Linux内核
-
Linux内核启动
- 加载驱动程序
- 挂载根文件系统
- 启动init进程
-
Init进程
- 系统第一个进程
- 解析init.rc配置文件
- 启动Zygote进程
-
Zygote进程
- 加载核心类库
- 启动SystemServer
- 作为应用进程的父进程
-
SystemServer
- 启动系统服务
- 启动ActivityManagerService等
-
Launcher
- 加载系统桌面
- 显示应用图标
编程实践
如何获取系统版本信息?
public class SystemInfoUtil {
public static String getSystemInfo() {
StringBuilder info = new StringBuilder();
// 获取Android版本号
info.append("Android版本: ").append(Build.VERSION.RELEASE)
.append("\n");
// 获取API级别
info.append("API Level: ").append(Build.VERSION.SDK_INT)
.append("\n");
// 获取设备制造商
info.append("制造商: ").append(Build.MANUFACTURER)
.append("\n");
// 获取设备型号
info.append("设备型号: ").append(Build.MODEL)
.append("\n");
return info.toString();
}
}使用示例:
// 在Activity中调用
TextView systemInfoText = findViewById(R.id.system_info);
systemInfoText.setText(SystemInfoUtil.getSystemInfo());这个工具类可以帮助开发者快速获取设备的系统信息,对于适配不同Android版本和设备型号非常有用。