kotlin 为什么setContent{}被调用两次?

wko9yo5t  于 2023-01-13  发布在  Kotlin
关注(0)|答案(1)|浏览(248)

我最近用Jetpack Compose启动了我的第一个项目(只有很少的Android开发经验)。为了检查性能,我记录了对任何函数/可组合函数的每次调用,以及在启动或方向改变时的一些意外行为(但没有进一步与应用交互):

我理解调用oncreate / super(同样,在方向改变的情况下),但是为什么setContent {}被调用两次呢?

override fun onCreate(savedInstanceState: Bundle?) {
    Log.v(tag, "oncreate")
    super.onCreate(savedInstanceState)
    Log.v(tag, "oncreatesuper")
    setContent {
        Log.v(tag, "setting content")
        Content()
    }
}

然后

@Composable
private fun Content() {
    val arrayOfNodes = rememberSaveable { mutableListOf<Wurzel>() }
    val toggleSizeInputDialog = rememberSaveable { mutableStateOf(false) }
    (...some more...)
    val currentConfig = LocalConfiguration.current
    val title = stringResource(id = R.string.title)
    Log.v(tag, "recomposing content")

    MyTheme {
        when (currentConfig.orientation) {
            Configuration.ORIENTATION_LANDSCAPE -> {
                Scaffold(...........)

我的项目太小了,看不到任何性能问题,但是我想找出这种行为的原因,以供将来参考,或者我是否严重误解了组合架构。

guz6ccqo

guz6ccqo1#

setComponent()没有被调用两次,但是传入的可组合函数被调用了两次,看起来像是某个事件导致了content可组合函数的重新组合。

相关问题