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

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

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

  1. @Composable
  2. fun ButtonText(
  3. text: String,
  4. ) {
  5. Text(
  6. text = text.uppercase(Locale.getDefault()),
  7. textAlign = TextAlign.Center,
  8. style = Typography.button
  9. )
  10. }

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

  1. @Preview
  2. @Composable
  3. fun ButtonTextPreview() {
  4. Surface {
  5. ButtonText(text = stringResource(id = R.string.button_example))
  6. }
  7. }

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

b1zrtrql

b1zrtrql1#

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

  1. @Composable
  2. fun ButtonTextPreview(txt: String) {
  3. Surface {
  4. ButtonText(text = txt)
  5. }
  6. }

相关问题