Browse Source
不是语种问题,是竞态。原生阿里初始化天然 >=1.2s(A 路 init → delay(1200) → B 路 init),期间只要再来一次 initialize/dispose,「代数」就变了,前一次返回 false;Dart 拿到 false 把 _isInitialized 清掉;接着 recognizeCallback() 看到 「未初始化」就调**无参** initialize()——默认值 provider=azure + [zh-CN,en-US], 把刚握手成功的阿里 zh→de 会话整个换成 Azure 中英三段拼装。此后原生 provider 停在 azure、Azure 识别器一直在跑,每次 dispose 都慢几秒,下一轮更容易撞进 1.2s 窗口,**退出重进也不会好**。中英「正常」只是因为默认值恰好是中英。 修在三层,缺一层都会复发: - azure_ast_service.dart:initialize() 串行化(_initInFlight);记住最近一次的 provider/语言表;recognizeCallback / startContinuousTranslation 走 _ensureInitialized——先等在途初始化,仍没成就**按上次参数**补一次, 永远不用默认值,没有可复用参数就直接报错。 - translation_controller.dart:_initializeCallModeTranslationService 串行链; isPreparing 期间忽略重复点开始;_attachBesCallTranslationBridge 开桥前先等 初始化真正落地(10s 上限)——原来靠 _modeInitFuture 3s 超时硬往下走, 桥开在原生初始化之前。 - AzureSpeechPlugin.kt/.swift:被新一代取代时打出阶段与代数、A/B 任一失败打 结果,排查先找这两行。iOS 另修一处独有差异:原先 A/B 无论成败都回 true, Dart 以为就绪、桥照开而实际一路是空的,现在按真实结果回。 Redmi K90 Pro Max 验证:连开 9 场(it/de/en/ja/fr/ko×2/en,含切语言、关闭重开、 退出重进)全部阿里 3.5,初始化各 1.2s,87 句译文,0 错误,断粮 0 次。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>main
5 changed files with 125 additions and 9 deletions
Loading…
Reference in new issue