Fragment之间的通信是Android架构设计中的一个关键点。选择不合适的通信方式会导致Fragment耦合过紧、难以测试和维护,甚至产生内存泄漏。经过多年的演进,目前业界形成了以 ViewModel 为核心,接口回调 作为补充的最佳实践方案。我将详细对比这两种方案,并说明它们的适用场景。”
核心方案对比与选择
首先,我们通过一个表格来快速了解两种核心方案的特点:
| 特性 | ViewModel (共享) | 接口回调 |
|---|---|---|
| 耦合度 | 松耦合,Fragment无需相互引用 | 紧耦合,宿主Activity必须实现接口 |
| 生命周期 | 自动管理,与作用域生命周期绑定 | 需手动管理,易忘记解注册导致内存泄漏 |
| 数据持久化 | 配置变更后数据保留 | 数据随Activity重建而丢失 |
| 测试难度 | 容易,可单独测试Fragment和ViewModel | 困难,需要模拟宿主Activity |
| 适用场景 | 有状态数据的共享和通信 | 无状态的、一次性的事件通知 |
方案一:使用 ViewModel(首选方案)
这是当前 最推荐、最现代化 的通信方式,特别是当通信涉及需要持久化的数据时。
1. 共享 ViewModel
原理:多个Fragment通过获取同一个Activity作用域的ViewModel实例来实现数据共享和通信。这个ViewModel的生命周期与宿主Activity绑定,只要Activity存在(即使是配置变更),ViewModel就存在。
Fragment通信最佳实践详解

最低0.47元/天 解锁文章
1648

被折叠的 条评论
为什么被折叠?



