From 00a4846829173e012268dc4cf6561a63d83a1e9d Mon Sep 17 00:00:00 2001 From: kunfei Date: Sun, 1 May 2022 09:04:06 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/legado/app/utils/RegexExtensions.kt | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/io/legado/app/utils/RegexExtensions.kt b/app/src/main/java/io/legado/app/utils/RegexExtensions.kt index 61ba70e0a..188b1ea9a 100644 --- a/app/src/main/java/io/legado/app/utils/RegexExtensions.kt +++ b/app/src/main/java/io/legado/app/utils/RegexExtensions.kt @@ -2,15 +2,11 @@ package io.legado.app.utils import io.legado.app.exception.RegexTimeoutException import io.legado.app.help.CrashHandler -import kotlinx.coroutines.Dispatchers.IO -import kotlinx.coroutines.MainScope -import kotlinx.coroutines.launch import kotlinx.coroutines.suspendCancellableCoroutine import splitties.init.appCtx +import kotlin.concurrent.thread import kotlin.coroutines.resume -private val scope = MainScope() - /** * 带有超时检测的正则替换 * 超时重启apk,线程不能强制结束,只能重启apk @@ -18,7 +14,7 @@ private val scope = MainScope() suspend fun CharSequence.replace(regex: Regex, replacement: String, timeout: Long): String { val charSequence = this return suspendCancellableCoroutine { block -> - val job = scope.launch(IO) { + val thread = thread { try { val result = regex.replace(charSequence, replacement) block.resume(result) @@ -27,14 +23,16 @@ suspend fun CharSequence.replace(regex: Regex, replacement: String, timeout: Lon } } mainHandler.postDelayed({ - if (job.isActive) { - val timeoutMsg = "替换超时,将在3秒后重启应用\n替换规则$regex\n替换内容:${this}" + if (thread.isAlive) { + val timeoutMsg = "替换超时,3秒后还未结束将重启应用\n替换规则$regex\n替换内容:${this}" val exception = RegexTimeoutException(timeoutMsg) block.cancel(exception) appCtx.longToastOnUi(timeoutMsg) CrashHandler.saveCrashInfo2File(exception) mainHandler.postDelayed({ - appCtx.restart() + if (thread.isAlive) { + appCtx.restart() + } }, 3000) } }, timeout)