From fc2f2065dfc375730ea0de4e9bdf21383c5a00e3 Mon Sep 17 00:00:00 2001 From: xfy Date: Fri, 24 Jul 2026 13:34:02 +0800 Subject: [PATCH] perf(core): offload LunarCache precomputing and batch calculation to Dispatchers.Default --- core/src/main/kotlin/plus/rua/project/CalendarViewModel.kt | 3 ++- .../main/kotlin/plus/rua/project/ui/CalendarMonthPage.kt | 6 +++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/core/src/main/kotlin/plus/rua/project/CalendarViewModel.kt b/core/src/main/kotlin/plus/rua/project/CalendarViewModel.kt index e4ec3b7..5bf1dbb 100644 --- a/core/src/main/kotlin/plus/rua/project/CalendarViewModel.kt +++ b/core/src/main/kotlin/plus/rua/project/CalendarViewModel.kt @@ -3,6 +3,7 @@ package plus.rua.project import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import kotlinx.coroutines.launch +import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharingStarted @@ -81,7 +82,7 @@ class CalendarViewModel( getMonthGridInfo(normalizedYear, normalizedMonth) } - viewModelScope.launch { + viewModelScope.launch(Dispatchers.Default) { monthsToPrecompute.forEach { info -> val dates = (0 until info.totalDays).map { i -> info.startDate.plus(DatePeriod(days = i)) diff --git a/core/src/main/kotlin/plus/rua/project/ui/CalendarMonthPage.kt b/core/src/main/kotlin/plus/rua/project/ui/CalendarMonthPage.kt index e3b202f..db44186 100644 --- a/core/src/main/kotlin/plus/rua/project/ui/CalendarMonthPage.kt +++ b/core/src/main/kotlin/plus/rua/project/ui/CalendarMonthPage.kt @@ -33,6 +33,8 @@ import plus.rua.project.DayCellInfo import plus.rua.project.LunarCache import plus.rua.project.ShiftKind +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext /** * 月度日历网格页面,支持两阶段折叠动画。 @@ -80,7 +82,9 @@ fun CalendarMonthPage( key1 = year, key2 = month ) { - value = LunarCache.default.getOrComputeBatch(days.map { it.date }) + value = withContext(Dispatchers.Default) { + LunarCache.default.getOrComputeBatch(days.map { it.date }) + } } val holidayEdges = remember(lunarDataMap, year, month) {