android - Android ViewPager2 是否提前准备 Fragments
问题描述
只是好奇这两种方法之间的性能差异:
方法一:直接Fragment
为每个位置返回新对象
class ProductAdapter(fragment: Fragment) : FragmentStateAdapter(fragment) {
override fun getItemCount() = 5
override fun createFragment(position: Int) = ProductPageFragment() //here
}
方法二:Fragments
提前准备,按位置返回
class ProductAdapter(fragment: Fragment) : FragmentStateAdapter(fragment) {
private val fragments = mutableListOf<ProductPageFragment>()
init {
repeat(5) { fragments.add(ProductPageFragment()) }
}
override fun getItemCount() = 5
override fun createFragment(position: Int) = fragments[position] //here
}
解决方案
性能差异将取决于 Fragment 及其在何处执行的操作,但通常差异不大,因为
当一个片段被实例化时,它开始于 INITIALIZED 状态。要让片段在其生命周期的其余部分过渡,必须将其添加到 FragmentManager。FragmentManager 负责确定其片段应该处于什么状态,然后将它们移动到该状态。
来自https://developer.android.com/guide/fragments/lifecycle
大多数片段设计在较高的生命周期状态下完成大部分工作,例如 at CREATED
,因此在性能上几乎没有差异,因为 viewpager2 的生命周期管理对于每种方法都是相同的。
推荐阅读
- java - 来自here api last version的android lite sdk的许多崩溃报告
- github - 在 Github Pages dinky 主题上编辑黑色空间
- javascript - 更改视图时如何防止反应导航为 AppBar 的高度设置动画?
- javascript - 使用 Node.js 打印文件
- charts - highcharts 仪表图表高度占用额外空间
- excel - 简单动态变量名 EXCEL VBA
- java - 如何在 gitlab-ci docker 构建期间提取共享库?
- r - 根据区间范围内的公共 id 和日期合并两个数据集
- javascript - 在javascript中使用360 div制作圆圈
- c++ - 从基指针到派生的转换问题