首页 > 解决方案 > 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
}

标签: androidperformanceandroid-viewpagerandroid-jetpackandroid-viewpager2

解决方案


性能差异将取决于 Fragment 及其在何处执行的操作,但通常差异不大,因为

当一个片段被实例化时,它开始于 INITIALIZED 状态。要让片段在其生命周期的其余部分过渡,必须将其添加到 FragmentManager。FragmentManager 负责确定其片段应该处于什么状态,然后将它们移动到该状态。

来自https://developer.android.com/guide/fragments/lifecycle

大多数片段设计在较高的生命周期状态下完成大部分工作,例如 at CREATED,因此在性能上几乎没有差异,因为 viewpager2 的生命周期管理对于每种方法都是相同的。


推荐阅读