2.6 KiB
2.6 KiB
网络响应 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.etsbiz_hxservice/src/main/ets/cookie/UpassSessionNetClient.etsbiz_auth/src/main/ets/auth/verifycode/CheckCodeLoginClient.etsbiz_auth/src/main/ets/auth/UserQueryClient.etsclaude_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 解析热点。