ViewPager2是Android Jetpack中对旧ViewPager的现代化替代,它与Fragment结合使用时,其核心适配器
FragmentStateAdapter和FragmentAdapter在内存管理策略和生命周期控制上有着根本性的区别。这些区别直接影响到应用的性能和内存占用。”
核心区别:内存管理哲学
首先,我们通过一个表格来快速把握两者的核心差异:
| 特性 | FragmentStateAdapter | FragmentAdapter |
|---|---|---|
| 设计目标 | 处理大量页面,优化内存使用 | 处理少量静态页面,保持所有页面活跃 |
| 页面管理 | 销毁不可见页面,只保存其状态 | 保留所有页面实例在内存中 |
| 状态保存 | 自动调用onSaveInstanceState()保存状态,并在页面重新创建时恢复 |
依赖Fragment自身在内存中的存活,无特殊状态恢复机制 |
| 适用场景 | 图片浏览器、新闻Feed流、多步骤表单等页面数量多或不确定的场景 | 固定的Tab页面(如3-5个),且每个页面都需要保持其UI状态(如滚动位置、输入内容) |
| 内存开销 | 低(仅保留少量页面实例) | 高(所有页面实例常驻内存) |
工作原理与生命周期深度剖析
为了更直观地理解这两种适配器对Fragment生命周期的管理差异,下图展示了它们在页面切换时的不同行为:

最低0.47元/天 解锁文章
2833

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



