From 9fd877485f603149f3cce21ce2a3f05f9826bb11 Mon Sep 17 00:00:00 2001 From: meyou <2636699780@qq.com> Date: Mon, 18 May 2026 22:49:49 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=9C=88=E2=86=92=E5=B9=B4?= =?UTF-8?q?=E8=A7=86=E5=9B=BE=E5=88=87=E6=8D=A2=E5=8D=A1=E9=A1=BF=EF=BC=9A?= =?UTF-8?q?Pager=20=E7=BC=93=E5=AD=98=E9=99=8D=E4=B8=BA=200=20+=20?= =?UTF-8?q?=E7=A7=BB=E9=99=A4=E5=BB=B6=E8=BF=9F=E9=A2=84=E7=BB=84=E5=90=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Perfetto trace 分析发现严重卡顿根因: - MonthView→YearView 切换耗时 2435ms - Choreographer#doFrame 单帧超时 4288ms - compose:pager:cache_window:keepAroundItems 阻塞 554ms×2 - Compose:onForgotten 组件销毁 600ms 修复: 1. CalendarPager/WeekPager/年视图 Pager 的 beyondViewportPageCount 从 1→0 月视图缓存页从 3 页(126 DayCell)降至 1 页(42 DayCell) 2. 移除 yearPagerBeyondViewport 延迟预组合机制(不再需要) --- .../plus/rua/project/ui/CalendarMonthView.kt | 16 +--------------- .../kotlin/plus/rua/project/ui/CalendarPager.kt | 2 +- .../kotlin/plus/rua/project/ui/WeekPager.kt | 2 +- 3 files changed, 3 insertions(+), 17 deletions(-) diff --git a/shared/src/commonMain/kotlin/plus/rua/project/ui/CalendarMonthView.kt b/shared/src/commonMain/kotlin/plus/rua/project/ui/CalendarMonthView.kt index 1e1ba24..11d6366 100644 --- a/shared/src/commonMain/kotlin/plus/rua/project/ui/CalendarMonthView.kt +++ b/shared/src/commonMain/kotlin/plus/rua/project/ui/CalendarMonthView.kt @@ -51,7 +51,6 @@ import androidx.compose.ui.input.pointer.pointerInput import androidx.compose.ui.layout.onSizeChanged import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.unit.dp -import kotlinx.coroutines.flow.first import kotlinx.coroutines.launch import kotlinx.datetime.DatePeriod import kotlinx.datetime.LocalDate @@ -93,24 +92,11 @@ fun CalendarMonthView( var screenHeightPx by remember { mutableIntStateOf(0) } var calendarContentHeightPx by remember { mutableIntStateOf(0) } var isMenuExpanded by remember { mutableStateOf(false) } - var yearPagerBeyondViewport by remember { mutableStateOf(0) } - // 视图切换时自动关闭菜单 LaunchedEffect(viewModel.isYearView) { isMenuExpanded = false } - // 年视图动画完成后再恢复预组合,避免动画期间触发邻页组合阻塞帧 - LaunchedEffect(viewModel.isYearView) { - if (viewModel.isYearView) { - snapshotFlow { viewModel.yearViewProgress } - .first { it >= 1f } - yearPagerBeyondViewport = 1 - } else { - yearPagerBeyondViewport = 0 - } - } - val pagerState = rememberPagerState(initialPage = START_PAGE, pageCount = { Int.MAX_VALUE }) // 年视图分页器 @@ -364,7 +350,7 @@ fun CalendarMonthView( ) HorizontalPager( state = yearPagerState, - beyondViewportPageCount = yearPagerBeyondViewport, + beyondViewportPageCount = 0, flingBehavior = PagerDefaults.flingBehavior(state = yearPagerState), modifier = Modifier .fillMaxWidth() diff --git a/shared/src/commonMain/kotlin/plus/rua/project/ui/CalendarPager.kt b/shared/src/commonMain/kotlin/plus/rua/project/ui/CalendarPager.kt index 711a6b7..ee9ef5a 100644 --- a/shared/src/commonMain/kotlin/plus/rua/project/ui/CalendarPager.kt +++ b/shared/src/commonMain/kotlin/plus/rua/project/ui/CalendarPager.kt @@ -67,7 +67,7 @@ fun CalendarPager( HorizontalPager( state = pagerState, - beyondViewportPageCount = 1, + beyondViewportPageCount = 0, flingBehavior = PagerDefaults.flingBehavior(state = pagerState), modifier = modifier ) { page -> diff --git a/shared/src/commonMain/kotlin/plus/rua/project/ui/WeekPager.kt b/shared/src/commonMain/kotlin/plus/rua/project/ui/WeekPager.kt index 6ba5664..d351cea 100644 --- a/shared/src/commonMain/kotlin/plus/rua/project/ui/WeekPager.kt +++ b/shared/src/commonMain/kotlin/plus/rua/project/ui/WeekPager.kt @@ -66,7 +66,7 @@ fun WeekPager( HorizontalPager( state = pagerState, - beyondViewportPageCount = 1, + beyondViewportPageCount = 0, flingBehavior = PagerDefaults.flingBehavior(state = pagerState), modifier = modifier ) { page ->