From 341b9c22ee34bab5a8621464e5b55f6194c3d9f9 Mon Sep 17 00:00:00 2001 From: HapeLee <1321903405@qq.com> Date: Mon, 17 Nov 2025 00:04:19 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B9=A6=E6=BA=90=E8=8F=9C=E5=8D=95=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/legado/app/utils/FlowExtensions.kt | 25 ++++++++++++++----- 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/io/legado/app/utils/FlowExtensions.kt b/app/src/main/java/io/legado/app/utils/FlowExtensions.kt index 4ac671d6e..ffab3f635 100644 --- a/app/src/main/java/io/legado/app/utils/FlowExtensions.kt +++ b/app/src/main/java/io/legado/app/utils/FlowExtensions.kt @@ -236,16 +236,29 @@ fun Flow.flowWithLifecycleAndDatabaseChange( fun Flow.flowWithLifecycleAndDatabaseChangeFirst( lifecycle: Lifecycle, - minActiveState: Lifecycle.State = Lifecycle.State.RESUMED, + minActiveState: Lifecycle.State = Lifecycle.State.STARTED, table: String ): Flow = callbackFlow { - val invalidationFlow = appDb.invalidationTracker - .createFlow(table, emitInitialState = true) + var update = 0 + val isActive = lifecycle.currentState.isAtLeast(minActiveState) + val channel = appDb.invalidationTracker + .createFlow(table, emitInitialState = isActive) .conflate() - + .onEach { update++ } + .produceIn(this) + if (!isActive) { + firstOrNull()?.let { + send(it) + } + } lifecycle.repeatOnLifecycle(minActiveState) { - combine(this@flowWithLifecycleAndDatabaseChangeFirst, invalidationFlow) { data, _ -> data } - .collect { send(it) } + if (update == 0) { + channel.receive() + } + this@flowWithLifecycleAndDatabaseChangeFirst.collect { + update = 0 + send(it) + } } close() }