更新滚动条上的填充时性能缓慢(折叠顶部栏)

问题描述 投票:0回答:1

我有一个

Scaffold
LargeTopBar
nestedScroll
来折叠内容滚动条,一切在模拟器上看起来都不错,但在真实设备上性能非常滞后(在发布模式下运行)。-

val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior()
Scaffold(
    modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),
    topBar = {
        TopAppBar(
            title = {
                Text(currentScreen.route)
            },
            scrollBehavior = scrollBehavior,
            colors = TopAppBarDefaults.topAppBarColors(
                containerColor = Color.Transparent,
                scrolledContainerColor = Color.Black.copy(alpha = 0.75f),
                navigationIconContentColor = Color.Black,
                titleContentColor = MaterialTheme.colorScheme.primary,
                actionIconContentColor = Color.Black
            )
        )
    },
) { padding ->
    Box {
        Background()
        MainNavHost(
            modifier = Modifier.fillMaxSize(),
            navController = navController,
            contentPadding = padding
        )
    }
}

如果我只是不通过删除

来更新
contentPadding

contentPadding = padding

一切都非常顺利。你知道优化这个动画时我可能会缺少什么吗?

编辑

此外,该问题似乎与

NavHost
有关,因为删除它可以解决问题。那么,设置
NavHost
以避免此滚动功能出现性能问题的正确方法是什么?

scroll android-jetpack-compose android-actionbar
1个回答
0
投票

因此,经过几个小时的困惑和愤怒之后,这是一个菜鸟错误。

以防万一有人遇到类似的问题,并提醒

remember
在重组过程中对繁重操作的重要性,在
MainNavHost
内部,我正在读取并解析带有一些数据的模拟json,这些数据发生在每个动画帧上,所以如下就像改变一样简单。-

val jsonString = readJsonFromAssets(context, "games.json")
val gson: Gson = GsonBuilder()
        .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
        .create()
val games: Map<String, List<Game>> = gson.fromJson(jsonString, object : TypeToken<Map<String, List<Game>>>() {}.type)

对于

val jsonString = remember { 
    readJsonFromAssets(context, "games.json") 
}
val gson: Gson = remember { 
    GsonBuilder()
        .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
        .create() 
}
val games: Map<String, List<Game>> = remember { gson.fromJson(jsonString, object : TypeToken<Map<String, List<Game>>>() {}.type) }

完全成功了。

© www.soinside.com 2019 - 2024. All rights reserved.