docs: add stability remediation evidence

This commit is contained in:
clz
2026-08-24 17:13:00 +08:00
commit b5d837cc45
20 changed files with 912 additions and 0 deletions
@@ -0,0 +1,45 @@
# 网络响应 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 解析热点。