kotlin 减少对stringResource()的调用次数

mmvthczy  于 2023-06-24  发布在  Kotlin
关注(0)|答案(1)|浏览(117)

在过去,调用resources.getString()之类的东西是一个代价高昂的操作。在jetpack compose方面,以及如何避免在每次重新组合/调用compose函数时调用stringResource(),这仍然是正确的吗?如何重载函数,以便不必为每个函数调用调用stringResource()
例如我有一个compose函数

@Composable
fun ButtonText(
    text: String,
) {
    Text(
        text = text.uppercase(Locale.getDefault()),
        textAlign = TextAlign.Center,
        style = Typography.button
    )
}

我从另一个compose函数调用它,但这里我们只是预览一下

@Preview
@Composable
fun ButtonTextPreview() {
    Surface {
        ButtonText(text = stringResource(id = R.string.button_example))
    }
}

据我所知,每次外部compose函数将被重新组合时,ButtonText()将被调用,其中stringResource()也将被调用。

b1zrtrql

b1zrtrql1#

为了避免这些不必要的重新组合,最好的办法是状态提升。请参考文档以获得深入的解释,但在这种情况下的解决方案是将字符串作为参数接收,而不是将其称为in-Composable。因此,当这个Composable重新组合时,将不需要一遍又一遍地获取它。把它一直吊到最有效的地方。

@Composable
fun ButtonTextPreview(txt: String) {
    Surface {
        ButtonText(text = txt)
    }
}

相关问题