简体   繁体   English

如何使用 Jetpack Compose 提高性能(在 @Composable 函数中组装某些东西时)

[英]How to Improve performance with Jetpack Compose (when assembling something inside a @Composable function)

Suppose I have two composables in my app:假设我的应用程序中有两个可组合项:

@Composable
fun CoreKeyboard(keyboardKeys: List<List<KeyboardKey>>, ...) {
    // ...
}

and

@Composable
fun NumberKeyboard(...) {
    val keyboardKeys = listOf(
        listOf(KeyboardKey("1"), KeyboardKey("2"), KeyboardKey("3")),
        listOf(KeyboardKey("4"), KeyboardKey("5"), KeyboardKey("6")),
        listOf(KeyboardKey("7"), KeyboardKey("8"), KeyboardKey("9")),
        listOf(KeyboardKey("0"))
    )

    CoreKeyboard(keyboardKeys = keyboardKeys, ...)

}

If I'm not wrong, this approach is not very performatic as in every recomposition the keyboardKeys in NumberKeyboard will be reassembled.如果我没记错的话,这种方法的性能不是很好,因为在每次重组中NumberKeyboard中的keyboardKeys键都会被重新组装。

What is the best way to do this?做这个的最好方式是什么?

I thought about using by remember { mutableStateOf(...) } , but keyboardKeys is immutable.我考虑过使用by remember { mutableStateOf(...) } ,但keyboardKeys是不可变的。 Is it still a good approach?它仍然是一个好方法吗?

If you have something that is expensive to compute and you want to compute it on your composable only once, simply wrap it with remember如果你有一些计算起来很昂贵的东西,并且你只想在你的可组合上计算它一次,只需用remember包装它

val keyboardKeys = remember {
    listOf(
    listOf(KeyboardKey("1"), KeyboardKey("2"), KeyboardKey("3")),
    listOf(KeyboardKey("4"), KeyboardKey("5"), KeyboardKey("6")),
    listOf(KeyboardKey("7"), KeyboardKey("8"), KeyboardKey("9")),
    listOf(KeyboardKey("0"))
    )
}

You only need the mutableStateOf if you want to mutate the value so that it can be observed.如果你想改变值以便观察它,你只需要mutableStateOf

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

相关问题 如何在 Android Jetpack Compose 的可组合物中启动协程 - how to launch a coroutine inside a composable in Android Jetpack Compose Jetpack Compose 应该如何引用可组合的高阶 function? - How should a composable higher order function be referenced with Jetpack Compose? 如何在 Jetpack Compose 中将图像从一个可组合 function 传递到另一个? - How to pass an image from one composable function to another in Jetpack Compose? Jetpack Compose 截取可组合 function 的屏幕截图? - Jetpack Compose take screenshot of composable function? Jetpack Compose:列表更改时更新可组合 - Jetpack Compose: Update composable when list changes 在 Jetpack Compose 中清除列表时可组合不重组 - Composable not recomposing when list is cleared in jetpack compose Jetpack Compose:如何用 AndroidView 覆盖 Composable? - Jetpack Compose : How to overlay Composable with AndroidView? 如何将 Jetpack Compose 中的子项传递给自定义可组合项? - How to pass children in Jetpack Compose to a custom composable? 如何测试包含 rememberLauncherForActivityResult 的 Jetpack Compose Composable? - How to test a Jetpack Compose Composable containing rememberLauncherForActivityResult? 如何在 Jetpack Compose 中动态增加可组合性? - How inflate composable dynamically in jetpack compose?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM