减少对 stringResource() 的调用次数

问题描述

过去,调用 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(...) }

这里只会从资源中获取一次,并在重新组合时从内存中重用