一、Jetpack 总览与设计哲学
说实话,我刚接触 Android 开发那会儿,最头疼的就是碎片化问题。不同厂商、不同系统版本,光是适配就能让人崩溃。后来 Google 推出了 Jetpack,我才算真正松了口气。
Jetpack 不是某个单一框架,而是一整套工具和库的集合。它帮我们解决了 Android 开发中那些「重复造轮子」的痛点。我个人习惯把它比作「开发者的瑞士军刀」——每个组件各司其职,组合起来威力巨大。
1.1 为什么需要 Jetpack?
你想想看,早期 Android 开发有多痛苦:
- 生命周期管理:Activity 和 Fragment 的生命周期回调,稍不注意就内存泄漏
- 数据持久化:SQLite 写起来又长又臭,还容易出错
- UI 更新:手动更新 UI,线程切换搞不好就崩
- 依赖管理:各种第三方库版本冲突,简直是噩梦
Jetpack 的出现,说白了就是 Google 把这些痛点一个个给「标准化」了。我记得 2018 年 Google I/O 上,他们宣布 Jetpack 时,台下掌声雷动——因为大家都受够了。
核心价值:Jetpack 让开发者专注于业务逻辑,而不是底层基础设施。它遵循「约定优于配置」的原则,减少了样板代码。
1.2 Jetpack 四大组件概览
Jetpack 分为四大类,每一类解决不同层面的问题。我习惯把它们想象成一座房子的结构:
| 组件分类 | 核心作用 | 代表库 |
|---|---|---|
| Architecture | 架构模式与数据管理 | ViewModel, LiveData, Room, Navigation |
| UI | 界面构建与交互 | Compose, Fragment, Animation |
| Foundation | 基础能力与兼容性 | AppCompat, Multidex, Test |
| Behavior | 系统行为与权限管理 | WorkManager, Permissions, DownloadManager |
1.3 Architecture 组件:应用的骨架
这部分是我最看重的。Architecture 组件提供了 MVVM 模式的官方实现。我在项目中遇到过很多团队,架构五花八门,最后维护成本高得吓人。
ViewModel:它解决了 Activity 重建时数据丢失的问题。嗯,这里要注意——ViewModel 的生命周期比 Activity 长,所以千万别在里面持有 View 引用,否则内存泄漏等着你。
LiveData:一个可观察的数据持有者。它自动感知生命周期,不会在 Activity 销毁后更新 UI。我曾经因为忘记取消订阅,导致空指针崩溃,用了 LiveData 后再也没犯过。
Room:SQLite 的抽象层。编译时检查 SQL 语句,比手写 SQLiteOpenHelper 安全多了。我建议所有新项目都用 Room,别再用原始 SQLite 了。
避坑指南:我曾经在 Room 的 DAO 里写了复杂的 JOIN 查询,结果性能惨不忍睹。后来发现用 @Transaction 注解可以解决关联查询的性能问题。
1.4 UI 组件:从 XML 到 Compose
UI 组件这块,变化最大。从早期的 XML 布局,到现在的 Jetpack Compose,Google 在 UI 开发上走了两条路。
Fragment:虽然现在被 Compose 挑战,但 Fragment 依然是主流。我建议新手先掌握 Fragment,再学 Compose。因为很多老项目还在用 Fragment。
Compose:声明式 UI,写起来像 Flutter。我个人习惯用 Compose 写新项目,开发效率确实高。但要注意,Compose 的学习曲线不低,尤其是状态管理那块。
Animation:动画库越来越强大。从属性动画到 Compose 动画,Google 一直在降低动画开发的门槛。
1.5 Foundation 组件:地基要打牢
Foundation 组件是那些「看不见但离不开」的东西。
- AppCompat:向下兼容,让老版本系统也能用新特性
- Multidex:解决方法数超过 65536 的问题。嗯,现在 AndroidX 已经内置了
- Test:测试框架,包括 JUnit、Espresso 等。我建议每个项目至少写单元测试
你想想看,如果没有 AppCompat,我们还得手动处理不同版本的 API 差异。那画面太美我不敢看。
1.6 Behavior 组件:系统交互的管家
Behavior 组件负责处理应用与系统的交互。这部分最容易出问题,因为不同厂商的系统行为差异很大。
WorkManager:处理后台任务。它自动选择最佳执行时机,比如充电时、WiFi 下。我曾经用 Service 做后台同步,结果被系统杀得片甲不留。换成 WorkManager 后,世界清净了。
Permissions:运行时权限管理。Android 6.0 之后,权限必须动态申请。Permissions 库简化了这个流程。
DownloadManager:系统级下载服务。支持断点续传,后台下载。我建议大文件下载都用它,别自己写下载逻辑。
注意:Behavior 组件依赖系统服务,不同厂商可能有不同的行为。比如小米的后台管理策略就很严格,WorkManager 可能无法按时执行。建议在真机上充分测试。
1.7 Jetpack 的设计哲学
Jetpack 的设计哲学,说白了就是三个词:解耦、标准化、生命周期感知。
解耦:组件之间松耦合,你可以只选需要的部分。比如只用 Room,不用 ViewModel,完全没问题。
标准化:Google 提供了官方的最佳实践。你不用再纠结「用 MVP 还是 MVVM」,直接上 Jetpack 就行。
生命周期感知:这是 Jetpack 最牛的地方。LiveData、ViewModel 都自动感知生命周期,你不需要手动管理。我刚开始用的时候,还担心会不会有坑,结果发现 Google 考虑得很周全。
我记得有一次,团队里新来的同事问:「为什么 Jetpack 这么流行?」我回答:「因为它让你少加班。」
1.8 如何开始使用 Jetpack?
如果你是新项目,我建议直接上 AndroidX + Jetpack。如果是老项目迁移,可以逐步替换。
具体步骤:
- 在 build.gradle 中启用 AndroidX
- 添加需要的 Jetpack 依赖
- 从 Architecture 组件开始,逐步替换旧代码
- 测试、测试、再测试
我的建议:先学 ViewModel + LiveData + Room 这个黄金组合。它们能解决 80% 的常见问题。等熟练了再学 Navigation、Paging 等高级组件。
好了,这一章就到这里。下一章我们深入 ViewModel 和 LiveData 的实现原理,看看它们到底是怎么做到生命周期感知的。