From dcf9d51014653c644a5dff592195f0c32ad11f56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E5=8B=A4=E6=B0=91?= Date: Tue, 21 Apr 2026 22:14:44 +0800 Subject: [PATCH] =?UTF-8?q?refactor(asr):=20=E4=BC=98=E5=8C=96ASR=E5=8A=A9?= =?UTF-8?q?=E6=89=8B=E7=9A=84=E6=80=A7=E8=83=BD=E5=92=8C=E8=B5=84=E6=BA=90?= =?UTF-8?q?=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 使用StringBuilder替代String拼接提升性能 - 清理ASR助手中的监听超时回调避免内存泄漏 - 在各个活动销毁时正确关闭图像解码执行器 - 修复语音识别中间结果的累积逻辑 - 优化ASR会话的资源释放流程 --- .../java/com/nova/brain/glass/helper/AsrHelper.kt | 12 +++++------- .../nova/brain/glass/ui/InspectionResultActivity.kt | 1 + .../nova/brain/glass/ui/SprayingFinishActivity.kt | 1 + .../com/nova/brain/glass/ui/SprayingOCRActivity.kt | 1 + .../nova/brain/glass/ui/SprayingResultActivity.kt | 1 + 5 files changed, 9 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/nova/brain/glass/helper/AsrHelper.kt b/app/src/main/java/com/nova/brain/glass/helper/AsrHelper.kt index 338805c..e3b3df2 100644 --- a/app/src/main/java/com/nova/brain/glass/helper/AsrHelper.kt +++ b/app/src/main/java/com/nova/brain/glass/helper/AsrHelper.kt @@ -113,7 +113,7 @@ object AsrHelper : OfflineCmdListener { } // 拼接每次识别会话中的中间结果 - private var currentPartial = "" + private val currentPartial = StringBuilder() /** 当前页面的场景标识,由各 Activity 在 onResume/onPause 中维护 */ var scene: String = "home" @@ -429,23 +429,20 @@ object AsrHelper : OfflineCmdListener { } override fun onStart(taskId: String) { - currentPartial = "" + currentPartial.clear() restartListeningTimeout() Log.d(TAG, "ASR started: $taskId") } override fun onPartialResult(taskId: String, text: String) { - // 滚动更新当前识别中间结果 - currentPartial += text + currentPartial.append(text) restartListeningTimeout() Log.d(TAG, "ASR partial: $text") } override fun onFinalResult(taskId: String, text: String) { - // 将最终结果追加拼接到会话字符串 isMicRunning = false - // 滚动更新当前识别中间结果 - currentPartial += text + currentPartial.append(text) asr?.stopAsrWithMic() Log.d(TAG, "ASR final result: $text") dismissListeningDialog() @@ -590,6 +587,7 @@ object AsrHelper : OfflineCmdListener { fun close() { isClosed = true OfflineCmdServiceHelper.removeOnLineListener(this) + mainHandler.removeCallbacks(listeningTimeoutRunnable) mainHandler.removeCallbacks(networkCheckRunnable) mainHandler.removeCallbacks(asrReconnectRunnable) mainHandler.removeCallbacks(ttsReconnectRunnable) diff --git a/app/src/main/java/com/nova/brain/glass/ui/InspectionResultActivity.kt b/app/src/main/java/com/nova/brain/glass/ui/InspectionResultActivity.kt index 992f3a2..23de9d8 100644 --- a/app/src/main/java/com/nova/brain/glass/ui/InspectionResultActivity.kt +++ b/app/src/main/java/com/nova/brain/glass/ui/InspectionResultActivity.kt @@ -232,6 +232,7 @@ class InspectionResultActivity : } override fun onDestroy() { + imageDecodeExecutor.shutdown() super.onDestroy() binding.iv.setImageDrawable(null) window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) diff --git a/app/src/main/java/com/nova/brain/glass/ui/SprayingFinishActivity.kt b/app/src/main/java/com/nova/brain/glass/ui/SprayingFinishActivity.kt index 0fb8747..58e3180 100644 --- a/app/src/main/java/com/nova/brain/glass/ui/SprayingFinishActivity.kt +++ b/app/src/main/java/com/nova/brain/glass/ui/SprayingFinishActivity.kt @@ -56,6 +56,7 @@ class SprayingFinishActivity : } override fun onDestroy() { + imageDecodeExecutor.shutdown() super.onDestroy() binding.photo1.setImageDrawable(null) binding.photo2.setImageDrawable(null) diff --git a/app/src/main/java/com/nova/brain/glass/ui/SprayingOCRActivity.kt b/app/src/main/java/com/nova/brain/glass/ui/SprayingOCRActivity.kt index 5867a33..46a3635 100644 --- a/app/src/main/java/com/nova/brain/glass/ui/SprayingOCRActivity.kt +++ b/app/src/main/java/com/nova/brain/glass/ui/SprayingOCRActivity.kt @@ -152,6 +152,7 @@ class SprayingOCRActivity : } override fun onDestroy() { + imageDecodeExecutor.shutdown() viewModel.cancelUpload() super.onDestroy() binding.content.setImageDrawable(null) diff --git a/app/src/main/java/com/nova/brain/glass/ui/SprayingResultActivity.kt b/app/src/main/java/com/nova/brain/glass/ui/SprayingResultActivity.kt index 79bab9f..c825ef0 100644 --- a/app/src/main/java/com/nova/brain/glass/ui/SprayingResultActivity.kt +++ b/app/src/main/java/com/nova/brain/glass/ui/SprayingResultActivity.kt @@ -256,6 +256,7 @@ class SprayingResultActivity : } override fun onDestroy() { + imageDecodeExecutor.shutdown() uiHandler.removeCallbacksAndMessages(null) successDialog?.dismiss() super.onDestroy()