繁体   English   中英

Jetpack compose 中的重组 vs 旧 ui 中的回收?

[英]Recomposition in jetpack compose vs recycle in old ui?

LazyColumnLazyRow正在替换旧 UI 中的RecyclerView ,但是当在RecyclerView中滚动项目并返回它时,它会消失,然后循环到优化 UI。

LazyColumn 和 LazyRow 是在做同样的事情吗?

我从Jetpack Compose 基础 Codelab中找到它

注意:LazyColumn 不像 RecyclerView 那样回收它的子元素。 当您滚动浏览它时,它会发出新的 Composables 并且仍然具有性能,因为与实例化 Android 视图相比,发出 Composables 相对便宜

经过测试,我看到LazyColumn只是组成可见项目。 并且,通过滚动不可见的项目将在再次可见时重新组合。

LazyColumn 使用 LazyList,它使用 LazyLayout 并在需要时使用SubComposeLayout来重组子 Composable,这与使用Modifier.verticalScroll()组成其所有子 Composable 的 Column 不同。

Subcomposable 有一个 subocompose function 可以在布局块中多次调用。 例如,这就是在 LazyRow 中发生的事情。 slotId 允许 SubcomposeLayout 跟踪和管理通过调用 subcompose 创建的合成。 例如,如果您从数组生成内容,您可能希望使用数组的索引作为它的 slotId,从而允许 SubcomposeLayout 确定上次生成的子组合应该在重组期间使用。 此外,如果一个 slotid 不再使用,SubcomposeLayout 将处理其对应的组合。

您可以在此处阅读 Google 开发人员关于SubcomposeLayout的完整答案。

暂无
暂无

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

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