You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Fragment中RecyclerView初始化卡顿:如何避免阻塞主线程渲染?

解决Fragment中RecyclerView初始化卡顿的方案

卡顿的核心原因不是代码放在onCreateView或onViewCreated里,而是数据转换(SourcesReference.shopData.toList())和过滤(updateFiltered())操作在主线程执行,阻塞了UI渲染流程。以下是具体优化方案:

1. 异步处理耗时数据逻辑

把数据转换、过滤这类耗时操作放到IO线程执行,完成后再切回主线程绑定RecyclerView:

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    val recyclerView = view.findViewById<RecyclerView>(R.id.shop_recycler)
    // 先设置布局管理器(轻量操作,可直接在主线程完成)
    recyclerView.layoutManager = LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)

    // 用viewLifecycleOwner的协程作用域,避免内存泄漏
    viewLifecycleOwner.lifecycleScope.launch {
        val preparedAdapter = withContext(Dispatchers.IO) {
            // IO线程处理数据
            val shopDataList = SourcesReference.shopData.toList()
            SourcesShopAdapter().apply {
                dataset = shopDataList
                updateFiltered() // 把过滤逻辑放在IO线程执行
            }
        }
        // 主线程绑定适配器
        recyclerView.adapter = preparedAdapter
    }
}

2. 视图绘制完成后执行(辅助优化)

如果还有少量主线程轻量操作需要延迟,可通过view.post让代码在视图绘制完成后执行,避免抢占渲染资源:

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    val recyclerView = view.findViewById<RecyclerView>(R.id.shop_recycler)
    recyclerView.post {
        recyclerView.layoutManager = LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)
        viewLifecycleOwner.lifecycleScope.launch(Dispatchers.IO) {
            val shopDataList = SourcesReference.shopData.toList()
            val adapter = SourcesShopAdapter().apply {
                dataset = shopDataList
                updateFiltered()
            }
            withContext(Dispatchers.Main) {
                recyclerView.adapter = adapter
            }
        }
    }
}

3. 优化适配器内部逻辑

检查SourcesShopAdapter的updateFiltered方法,如果包含循环遍历、复杂计算等操作,确保这些逻辑不会在主线程执行;同时避免在适配器初始化时做不必要的对象创建或资源加载。

内容的提问来源于stack exchange,提问作者Nikitiy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 21:13:22