【问题标题】:Android ViewPager2 Prepare Fragments in Advance or NotAndroid ViewPager2 是否提前准备 Fragments
【发布时间】:2021-09-13 19:45:35
【问题描述】:

只是好奇这两种方法之间的性能差异:

方法一:每个位置直接返回新的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
}

【问题讨论】:

  • 方法 #2 从根本上被破坏,会导致崩溃

标签: android performance android-viewpager android-jetpack android-viewpager2


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-17
    • 1970-01-01
    相关资源
    最近更新 更多