我有一个
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
以避免此滚动功能出现性能问题的正确方法是什么?
因此,经过几个小时的困惑和愤怒之后,这是一个菜鸟错误。
以防万一有人遇到类似的问题,并提醒
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) }
完全成功了。