# 期货 HarmonyOS 客户端稳定性治理需求开发文档
## 1. 文档目的
本文将现有冻结(App Freeze)与内存溢出(OOM)整改记录整理为可研发落地、可测试验收的需求。目标是在不改变行情、交易、画线业务协议及用户可见规则的前提下,降低主线程阻塞、请求重复与对象滞留风险。
本文记录的是已验证改造的需求基线,不代表所有项均已随正式版本发布;版本接入与线上复采必须以各上游仓库和发布包为准。
## 2. 范围与代码归属
| 域 | 主要归属 | 本次目标 |
| ------ | ------------------------------------------------------------------- | --------------------- |
| 应用业务 | `harmony-ths-futures` | 交易、行情与 WebView 生命周期治理 |
| 通信 | `ohos_mobile_lib_communication` | 解码、曲线解析、请求队列与缓冲释放 |
| 交易 SDK | `harmony_futures_trade_sdk` `futures_trade_sdk`(原生 `lib-weituosdk`) | Native 锁规避、成交推送、市价缓存 |
| 画线 SDK | `hmdrawlinebasicsdk` | 绘制候选集去重 |
## 3. 功能需求
### FR-01 通信与解析异步化
1. XML 响应的字节解码和属性解析必须在 TaskPool 中完成;主线程仅消费解析结果。解析入口只允许携带可序列化数据,禁用 DOCTYPE,并保持登录会话、验证码、手机号查询的原有回调与失败语义。
2. `HXZip` 解压及曲线的 `points × fields` 解析必须在通信 HAR 的持久 Worker 中执行。响应须按请求顺序串行回调;Worker 异常须拒绝当前等待任务,但不得阻断后续消息。
3. `QueueManagement` 必须维护 `instanceId → client/companion` 索引,避免响应分发遍历全部客户端;跨 `frameId` 切换时,必须释放旧请求缓冲、主/伴随 client 映射。
### FR-02 行情与绘制主线程削峰
1. 表格实时通知在同一事件循环内仅保留最新一份 `TableData`,已有定时器时不得继续创建闭包;切页或释放时必须取消定时器并清空待通知数据。
2. 画线候选集去重必须保持“同对象、本地 ID 相同或远端 ID 相同即重复”的既有语义与插入顺序,复杂度由 O(n²) 降为 O(n)。
### FR-03 交易链路防重复与锁规避
1. 前台交易页的在线判断必须读取 `currentAccount.isOnline` 缓存,不得同步调用 Native 在线查询;断网、重登、切账号后的条件单补查行为保持不变。
2. 同一账号重登必须复用进行中的 Promise;无实际拦截效果的交易发送前 SDK 状态检查必须移除。
3. 挂单查询进行中再次触发时,只保留一次尾随刷新;列表构建中的套利灰度判断按账号缓存,并在设置更新、账号或灰度配置变化时失效。
4. 成交推送必须按唯一标识去重。首次加载可全量排序,后续记录必须以稳定二分插入,且不改变成交量、盈亏、账号过滤与展示顺序。
5. 市价缓存须按“合约 + 价格类型”更新同一节点;消费后必须用可修改数组操作删除节点,禁止重复累积。
### FR-04 页面与请求资源释放
1. `TableRequestClient` 切页、取消订阅或释放时,必须幂等地移除旧队列映射、实时订阅、请求缓冲与待通知数据。
2. WebView 页面销毁时,必须释放 `OverViewEvent` 的三个行情请求,并调用 `UnifiedSocketRequestEvent`、`MobiPushRealDataRequestEvent`、`ForwardEvent` 的销毁清理,移除请求 client、缓冲、订阅及 JS bridge 引用;`GetHQEvent` 继续使用既有 `release()`。
## 4. 影响面
本章仅描述应用层、ArkTS SDK 和画线 SDK 的业务影响,不包含 `ohos_mobile_lib_communication` 的 Worker、解压、曲线解析、队列索引及跨 Frame 缓冲等内部修改,也不包含 `futures_trade_sdk` 原生 `lib-weituosdk` 的 C++ 锁优化。
同一功能涉及上游 SDK 实现和应用 HAR 接入时,分别列入对应代码库。
### 4.1 `harmony-ths-futures`
| 类型 | 业务入口 | 应用层改动 | 保持不变 | 重点回归 |
| --- | --- | --- | --- | --- |
| Freeze | 登录、验证码、手机号查询 | XML 解码与属性解析改为异步执行,主线程只处理结果 | 请求协议、回调接口、Cookie 与手机号存储规则 | Upass 登录、验证码成功/失败、手机号回填、用户切换、损坏 XML |
| Freeze | K 线详情与画线 | 接入画线去重优化 HAR,并通过 overrides 统一依赖版本 | 画线数据、样式、顺序、命中及编辑规则 | HAR 依赖唯一性、多画线滑动、周期切换、跨周期画线 |
| Freeze | 交易页前后台、断网重登、挂单刷新 | 在线状态改读应用缓存;同账号重登复用进行中任务;挂单请求合并并保留一次尾随刷新;套利开关按账号缓存 | 下单/撤单流程、查询结果、重登回调及条件单补查时机 | 前后台切换、断网恢复、账号切换、挂单/委托刷新、灰度配置更新 |
| Freeze | 成交查询与成交推送 | 接入成交推送去重与排序优化 HAR | 成交查询入口、账号过滤、成交量及盈亏展示 | HAR 接入、重复推送、账号切换及成交汇总 |
| OOM | 行情列表分组切换与实时刷新 | `TableRequestClient` 在切换或释放时清理订阅、请求缓冲和待通知数据;同一事件循环只保留最新通知 | 行情请求参数、解析结果与最终展示数据 | 高频推送、连续切换分组、离开行情页、Local Heap 稳态 |
| OOM | WebView 页面退出 | 页面销毁时统一释放 `OverViewEvent`、Unified Request、MobiPush 实时请求、Forward 透传请求及 GetHQ 请求引用 | 请求参数、解析与回调数据、前后台恢复行为 | 完整销毁链、反复进入/退出 15 轮、在途请求释放、VmRSS 稳态与 OOM/Crash 日志 |
### 4.2 `harmony_futures_trade_sdk`
| 类型 | 业务入口 | ArkTS SDK 改动 | 保持不变 | 重点回归 |
| --- | --- | --- | --- | --- |
| Freeze | 成交查询与成交推送 | 按成交标识去重;首次加载完成排序,后续成交使用稳定二分插入 | 成交量、盈亏汇总、账号过滤与既有排序规则 | 重复推送、乱序推送、夜盘边界、账号切换及成交汇总 |
| OOM | 交易市价缓存 | 对相同“合约 + 价格类型”更新既有节点,消费后正确删除 | 报价来源、缓存键与取价结果 | 重复更新、读取最新价格、删除后为空、长时间交易页运行 |
### 4.3 `hmdrawlinebasicsdk`
| 类型 | 业务入口 | 画线 SDK 改动 | 保持不变 | 重点回归 |
| --- | --- | --- | --- | --- |
| Freeze | K 线详情与画线 | 画线候选集使用线性去重,避免画线较多时主线程反复遍历 | 画线样式、顺序、命中、编辑、删除及云端合并规则 | 多画线滑动、周期切换、跨周期画线及重复描边 |
## 7. 附Change-notes 追溯
| 需求域 | 改动仓库 | 原始功能改动记录(括号内为改动仓库) |
| ------ | ----------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 通信与解析 | `harmony-ths-futures`
`ohos_mobile_lib_communication` |