问题描述
过去,调用 resources.getString()
之类的操作成本很高。
就jetpack compose以及如何避免每次重新组合/调用compose函数时都调用stringResource()
而言,它仍然如此吗?如何重载该函数,以便您不必为每个函数调用调用 stringResource()
?
@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))
}
}
据我所知,每次重构外部组合函数时,ButtonText()
都会被调用,stringResource()
也会被调用。
解决方法
据我所知,Compose 足够聪明,可以根据文档仅重构更改的内容。无论如何,如果你想避免一遍又一遍地获取资源,你可以使用类似
val resource = remember { stringResource(...) }
这里只会从资源中获取一次,并在重新组合时从内存中重用