繁体   English   中英

Jetpack Compose 列表性能重组计数

[英]Jetpack compose list performance recomposition counts

我注意到(我知道在调试模式下测试不好)我的应用程序滚动非常滞后,然后我查看布局检查器并尝试计算重组。 例如,我看到某些后期重组发生了 5 次甚至 8 次。这真的会严重影响我的应用程序性能吗? 这是显示布局检查器的图像在此处输入图像描述

这取决于您预期的重组计数应该是多少。 重构本身并没有什么不好,其实是更新UI的必要。

但是你不应该发生不必要的重组,因为这对性能不利。

从您的屏幕截图很难说这些数字是否高。 例如是第一次进入特定屏幕后截取的屏幕截图,那么 5 似乎很高,但这同样取决于您的特定代码以及您在该特定屏幕中期望的重组次数。

我尝试自己对特定关键 UI 元素(例如列表等)大约期望进行多少次重组进行逻辑计算,然后与布局检查器进行比较。 如果布局检查器中的计数比我预期的高很多,那么在很多情况下,我的代码在 UI 更新方面并不是最佳的。

Jetpack compose 中的列表需要注意的一个具体性能问题是,您需要小心地将列表的数据加载到 Composable 中。 假设您想从 ViewModel 的数据库中加载数据,ViewModel 使用协程从您的 Repository 调用数据库加载,并且您想将此数据加载到 Composable function 中。在这里,您应该使用 SideEffects 来确保只加载数据一次而不是重组(如果数据没有改变)。 一种方法是使用 produceState:

//empty defined elsewhere
 val myData by produceState(initialValue = empty) 
     {
         viewModel.getData().observe(lifeCycleOwner) 
         {
             value = it
         }
     }

有关详细信息,请参阅文档。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM