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

46 lines
2.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 网络响应 XML 异步解析
## 修复提交
| 仓库 | 分支 | Commit ID | 说明 |
| --- | --- | --- | --- |
| `harmony-ths-futures` | `work-20260818-clz-FUHM-1979-apm-appfreeze` | `e16813f86b8dbabcf6e6e4a18df72c80c69cc9db` | 认证 XML 解析迁移至 TaskPool`ConcurrentXmlParser` |
## 背景与目标
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;没有指定结束标签时,获取全部目标属性后立即停止。主线程只处理返回值,不向子线程传递业务对象。
三处调用配置:
- Upass`gbk`,提取 `sessionid`
- 验证码:`gbk`,提取 `code``msg`,遇到 `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 解析热点。