android - 在后台线程中测量子可组合项
问题描述
我想创建一个@Composable
布局,以特定方式放置其子可组合。为此,它需要知道Constraints
,例如maxWidth
和maxHeight
。但是在数据集庞大的情况下,孩子们的大小和位置的计算可能会很繁重。有没有办法在后台线程中执行此计算,然后“发布”MeasureResult
后面?代码如下所示:
Layout(
content = {
data.forEach { node ->
ItemContent(node)
}
},
) { measurables, constraints ->
val nodes = measurer.measureNodes( // I want to do this in background
data,
constraints.maxWidth,
constraints.maxHeight,
)
val placeables = measurables.mapIndexed { index, measurable ->
measurable.measure(Constraints.fixed(nodes[index].width, nodes[index].height))
}
layout(constraints.maxWidth, constraints.maxHeight) {
placeables.forEachIndexed { index, placeable ->
placeable.placeRelative(nodes[index].offsetX, nodes[index].offsetY)
}
}
}
问题是,您不能在 measure 块内启动协程,也不能将整个Layout
可组合组件包装在协程范围内,因为它需要从可组合范围调用。我不知道该怎么做
解决方案
我不知道你在想什么,但你真的应该参考文档。Compose 中的所有 UI 呈现都是异步的,因此您不必担心在这里显式创建协程或产生新线程。
推荐阅读
- javascript - 寻找返回字符串位置的拆分变体
- c# - 使用 jquery 以表单形式发送输入数组
- python - 如何使用 python 代码创建与谷歌云实例的连接?
- java - 程序完成后 Java 挂起一分钟
- stenciljs - 创建新的 stenciljs 项目时出现错误“读取 ECONNRESET”。如何解决相同的问题?
- binary-search - 离散二分搜索主要理论
- javascript - 使用 javascript 创建选项弹出窗口
- r - 如何在 R 中执行词干提取和词形还原?
- javascript - 网页加载后自动键盘“向下箭头”按下
- mysql - MySQL查询从查询结果中获取字符串值