Files
future-harmony-freeze-oom-fix/harmony-ths-futures-freeze/doc/change-notes/02-xml-taskpool-refactor.md
T

2.6 KiB
Raw Blame History

网络响应 XML 异步解析

修复提交

仓库 分支 Commit ID 说明
harmony-ths-futures work-20260818-clz-FUHM-1979-apm-appfreeze e16813f86b8dbabcf6e6e4a18df72c80c69cc9db 认证 XML 解析迁移至 TaskPoolConcurrentXmlParser

背景与目标

Top 20 冻屏日志中,主线程采样命中 Upass 响应的 GBK 解码和 XmlPullParser.parse()。进一步扫描发现验证码响应、账户手机号查询也在通信回调中同步解码并解析 XML。本次统一将三条活动链路迁移到 TaskPool,避免响应体异常放大时阻塞主线程。

修改范围

  • biz_common/src/main/ets/utils/xml/ConcurrentXmlParser.ets
  • biz_hxservice/src/main/ets/cookie/UpassSessionNetClient.ets
  • biz_auth/src/main/ets/auth/verifycode/CheckCodeLoginClient.ets
  • biz_auth/src/main/ets/auth/UserQueryClient.ets
  • claude_tool/subthread-import-guard/subthread-import-policy.json

biz_auth/src/main/ets/auth/UpassSessionNetClient.ets 未发现导出或调用关系,属于当前不可达的遗留实现,本次不修改。

通用方案

新增 parseXmlAttributes() 并发方法,参数为原始字节、字符编码、目标属性列表和可选结束标签。TaskPool 内完成文本解码与 XML 扫描,统一关闭 DOCTYPE;没有指定结束标签时,获取全部目标属性后立即停止。主线程只处理返回值,不向子线程传递业务对象。

三处调用配置:

  • Upassgbk,提取 sessionid
  • 验证码:gbk,提取 codemsg,遇到 wlh_thsreg_modify 结束标签停止。
  • 用户查询:utf-8,提取 ckmobile

并发入口只包含 @ohos.util@ohos.xml 两条运行时依赖边,已精确登记到子线程导入策略。

功能影响

  • Upass SessionId 获取、持久化及 Cookie 建立。
  • 手机号登录或注册时的验证码结果回调。
  • 登录完成或推送更新时的账户手机号回填与偏好存储。

请求协议、公开回调接口和存储键不变。解析失败会进入原有失败处理;用户查询异步期间若发生用户切换,会丢弃旧响应。验证码日志不再输出完整 XML,只记录状态码和消息。

验证

node claude_tool/subthread-import-guard/check-subthread-imports.mjs 已通过:通用入口包含 1 个本地闭包文件和 2 条运行时依赖边。按当前要求未执行完整编译。运行期仍需覆盖 Upass 登录态、验证码成功/失败、手机号回填、用户切换和损坏 XML 场景,并确认主线程采样栈不再出现 XML 解析热点。