- 分类
- Jetpack
Jetpack 组件速查:按族归类,而不是逐个记 API
Jetpack组件按职责分族:数据与状态、UI绑定、生命周期、依赖注入。ViewModel管理界面状态,配合LiveData/StateFlow暴露不可变数据,需注意线程切换(viewModelScope默认Main线程)及测试方法(无需启动Activity)。数据存储方面,Room通过Entity/Dao/Database实现类型安全的SQLite管理,适合复杂关系查询;DataStore(Proto/Preferences)处理简单键值存储,读写需走协程/Flow避免ANR。
UI绑定存在两种模式:DataBinding在XML中直接定义表达式与双向绑定,但构建成本高;ViewBinding通过APT生成类型安全的视图引用,适合基础视图操作,但需注意在onDestroyView置空绑定避免内存泄漏。选择依据为是否需要动态表达式与性能考量。
生命周期与初始化初始化分离:Lifecycle管理组件状态流转(如ViewTreeLifecycleOwner同步窗口消失),重要初始化拓扑需App Startup控制(可避免冷启动拖拽Application.onCreate)。依赖注入使用Hilt框架,需注意作用域配对(如ViewModel与EntryPoint关联),测试时借助UninstallModules隔离多模块依赖。
技术选型边界:LiveData专攻界面状态的无副作用观察,Flow适用于后台并发数据流收集(需配合repeatOnLifecycle避免早停);Room与DataStore按数据复杂度分工,Room处理多表关联,DataStore专攻克简单配置存储。历史对比中,Room替代裸SQL提升安全性与查询能力,DataStore解决SP卡顿及多进程同步问题。新旧技术差异通过表格明确:分别覆盖现代架构的初始化管理、属性绑定、observation模式演进及存储方案优化。
- 2026/09/16 14:22
- 8
- 0
- 0
- 24.8℃
Android 中 ViewModel、Application、Repository 与 currentUser 的关系
一、ViewModel 不是全局数据仓库 在 Android 开发中,ViewModel 主要用于保存和管理 页面相关的 UI 状态。 例如: class ProfileViewModel : ViewModel() {
val userName = MutableLiveData<Stri
- 2026/06/28 11:39
- 18
- 0
- 0
- 25.8℃
Android数据持久化(五):SP vs. DataStore vs. MMKV
一、 核心原理分析 1. SharedPreferences (SP) 存储格式: 基于 XML 文件,键值对存储。 I/O 模型: 全量读写。初始化时将整个 XML 加载进内存(Map 结构);修改数据时,即使只改动一个字节,也会将整个 Map 序列化并覆盖写入文件。 线程模型: 读操作同步;写操
- 2026/02/22 20:08
- 18
- 0
- 0
- 25.8℃