From 4beeb2d4f64a42556f5f2c43ee5afa833bf3670b Mon Sep 17 00:00:00 2001 From: HapeLee <63206378+HapeLee@users.noreply.github.com> Date: Wed, 13 May 2026 18:18:03 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BA=94=E7=94=A8=E5=90=8E=E5=8F=B0=E6=97=B6?= =?UTF-8?q?=E9=97=B4=E8=BF=87=E9=95=BF=E6=97=B6=EF=BC=8C=E4=B8=8B=E8=BD=BD?= =?UTF-8?q?=E5=B4=A9=E6=BA=83=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/legado/app/service/CacheBookService.kt | 26 ++++++++++--------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/io/legado/app/service/CacheBookService.kt b/app/src/main/java/io/legado/app/service/CacheBookService.kt index 4bafd29aa..25d2dcc85 100644 --- a/app/src/main/java/io/legado/app/service/CacheBookService.kt +++ b/app/src/main/java/io/legado/app/service/CacheBookService.kt @@ -49,6 +49,7 @@ class CacheBookService : BaseService() { companion object { private const val MB = 1024L * 1024L private const val DIAGNOSTICS_LOG_INTERVAL_MILLIS = 5_000L + private const val MAX_IDLE_SPIN_MS = 60_000L var isRun = false private set @@ -181,15 +182,8 @@ class CacheBookService : BaseService() { admissionIdleWaiters.values.flatten().forEach { it.complete(Unit) } admissionIdleWaiters.clear() } - serviceCommandScope.launch { - try { - serviceCommandMutex.withLock { - CacheBook.close(clearFailureState = false) - } - } finally { - serviceCommandScope.cancel() - } - } + CacheBook.close(clearFailureState = false) + serviceCommandScope.cancel() super.onDestroy() } @@ -486,14 +480,22 @@ class CacheBookService : BaseService() { private suspend fun runDownloadLoop() { try { + var lastActiveTime = System.currentTimeMillis() while (currentCoroutineContext().isActive) { drainPendingDownloadRequests() if (CacheBook.isGloballyPaused) { - delay(200) - continue + break + } + val isActiveNow = CacheBook.isRun + || hasPendingDownloadRequests() + || hasAdmittingRequests() + if (isActiveNow) { + lastActiveTime = System.currentTimeMillis() + } else { + break } if (!CacheBook.isRun) { - if (!hasPendingDownloadRequests() && !hasAdmittingRequests()) break + if (System.currentTimeMillis() - lastActiveTime > MAX_IDLE_SPIN_MS) break delay(200) continue }