我在 Jetpack Compose 中开发了一个相当复杂的键盘布局。最初,布局工作正常,按下按键时动画运行非常流畅。不幸的是,由于事件的一些重新组合后,动画和一切都变得非常缓慢和滞后。
我尝试对 Jave 方法调用进行采样,但我只能看到某些函数比平时花费的时间要长得多。
编辑:
我已经能够隔离问题。我发现性能问题只出现在多模块项目中。当我将完全相同的撰写代码放在根目录app
模块问题消失。
我创建了一个重现该问题的项目:
如果您想在多模块项目中重现该问题,您必须多次在类别之间切换,然后一切都变得非常滞后
注意:我知道 Jetpack Compose 仍处于 alpha 阶段,这个问题可能是 Jetpack Compose 中的一个错误。但我想确保它不是我的代码的错误或 Compose 的一般限制
最佳答案
解决方法是使用 remember
可组合为 Keyboard
@Composable
以防止在重组期间进行布局计算。
val refs: List<List<Pair<Key, ConstrainedLayoutReference>>> =
remember {
keyboard.map { row ->
row.map {
it to createRef()
}
}
}
val modifier = remember { ... }
val modifierPressed = remember { ... }
源代码: https://github.com/dautovicharis/example_compose-keyboard-multimodule/commits/main
关于android - 仅在多模块项目中出现的 Jetpack Compose 性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65818058/