refactor(asr): 优化ASR助手的性能和资源管理
- 使用StringBuilder替代String拼接提升性能 - 清理ASR助手中的监听超时回调避免内存泄漏 - 在各个活动销毁时正确关闭图像解码执行器 - 修复语音识别中间结果的累积逻辑 - 优化ASR会话的资源释放流程
这个提交包含在:
父节点
70ee0c7d64
当前提交
dcf9d51014
@ -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)
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -56,6 +56,7 @@ class SprayingFinishActivity :
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
imageDecodeExecutor.shutdown()
|
||||
super.onDestroy()
|
||||
binding.photo1.setImageDrawable(null)
|
||||
binding.photo2.setImageDrawable(null)
|
||||
|
||||
@ -152,6 +152,7 @@ class SprayingOCRActivity :
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
imageDecodeExecutor.shutdown()
|
||||
viewModel.cancelUpload()
|
||||
super.onDestroy()
|
||||
binding.content.setImageDrawable(null)
|
||||
|
||||
@ -256,6 +256,7 @@ class SprayingResultActivity :
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
imageDecodeExecutor.shutdown()
|
||||
uiHandler.removeCallbacksAndMessages(null)
|
||||
successDialog?.dismiss()
|
||||
super.onDestroy()
|
||||
|
||||
正在加载...
在新工单中引用
屏蔽一个用户