Android源码分析
Android源码分析
Actviity启动流程
核心流程
源码关键节点
// 1. 客户端进程
Activity.startActivity()
↓
Instrumentation.execStartActivity()
↓
ActivityManager.getService().startActivity() // 跨进程调用AMS
// 2. 系统进程(AMS)
ActivityManagerService.startActivity()
↓
ActivityStarter.startActivityMayWait()
↓
ActivityStack.resumeTopActivity()
// 3. 回到客户端进程
ActivityThread.handleLaunchActivity()
↓
Instrumentation.callActivityOnCreate()
↓
Activity.performCreate()Window 与 WindowManager
核心关系
窗口添加流程
AMS
核心功能架构
进程管理源码
WMS
窗口管理核心
ClassLoader 与热修复
ClassLoader:它是 JVM 或 Android Dalvik/ART 虚拟机的一部分,负责在运行时将.class或.dex文件加载到内存,并转换成可执行的类或组件。
.class或.dex文件加载到内存,并转换成可执行的类或组件。热修复
双亲委派源码
热修复原理
SharedPreference 源码缺陷
核心问题
优化方案
陷阱一:异步写入的“幽灵” - apply()的可靠性
apply()的可靠性陷阱二:主线程的“隐形炸弹” - 首次加载与全量读写
陷阱三:多进程的“假象” - MODE_MULTI_PROCESS
MODE_MULTI_PROCESS陷阱四:类型安全的“幻觉” - 无编译时检查
陷阱五:监听器的“内存泄漏”与“失效”
ContentProvider 组件初始化顺序
1. 启动顺序概览
2. 详细初始化流程
二、初始化的触发条件
1. 首次访问时(按需初始化)
2. 应用启动时自动初始化(Android 7.0+ 优化)
3. 特殊系统组件的初始化
三、初始化顺序与依赖关系
1. 声明顺序决定初始化顺序
2. 危险的隐式依赖
四、初始化对启动性能的影响
1. 启动延迟问题
2. 启动性能数据
五、如何优化 ContentProvider 初始化
1. 延迟初始化(Lazy Initialization)
2. 使用异步初始化框架
3. 合并多个 Provider
4. 完全避免 ContentProvider
六、常见陷阱与最佳实践
1. 避免的陷阱
2. 最佳实践
场景
推荐做法
不推荐做法
3. 监控初始化性能
七、特殊场景分析
1. 多进程应用中的初始化
2. Library 中的 ContentProvider
Application
一、Application 的初始化流程
1. 创建时机:进程启动时
2. 创建过程:makeApplication 方法
3. Instrumentation 创建 Application
二、Application 的核心方法分析
1. attach(Context context) 方法
2. onCreate() 方法
3. onTrimMemory() 和 onLowMemory()
三、Application 的设计模式
1. 单例模式
2. 门面模式(Facade)
3. 观察者模式
四、Application 的生命周期
1. 完整生命周期时序
2. 多进程的生命周期
五、源码中的关键设计点
1. Context 继承体系
2. 资源管理机制
3. 组件回调的线程安全性
六、Application 的性能陷阱
1. Application 初始化阻塞
2. 内存泄漏风险
七、Application 的最佳实践
1. 优化启动速度
2. 使用 App Startup 库
3. 避免的常见错误
4. 多进程处理
八、Application 的高级用法
1. 监控 Activity 生命周期
2. 全局异常处理
3. 热修复支持
StrictMode
一、StrictMode 的核心作用
1. 监控主线程的违规操作
检测类型
具体问题
影响
2. 检测内存泄漏
3. 虚拟机策略违规
二、StrictMode 的使用方式
1. 基本配置
2. 更严格的配置示例
三、StrictMode 的检测类型详解
1. 线程策略(ThreadPolicy)
2. 虚拟机策略(VmPolicy)
四、StrictMode 的输出日志解析
1. 线程策略违规日志
2. 虚拟机策略违规日志
3. 违规类型代码
违规码
含义
对应检测方法
五、高级用法与技巧
1. 临时关闭 StrictMode
2. 条件性检测
3. 自定义违规处理器
4. 在特定线程上启用 StrictMode
Last updated