【问题背景】 CallBackResolution.java 中两个 static 集合 (memberInfoDtos、groupInfos) 用于暂存 PTT 引擎回调的群组/群成员信息。原实现使用 ArrayList/LinkedList, 仅在收到 groupNo==1 / memberNo==1 的边界事件时调用 clear()。 【潜在风险】 1. 若服务端漏发边界事件 (1) 或中途断流,列表将无限增长 2. 长周期运行 (消防值守台常驻) 时,Heap 中堆积大量 DTO 对象 3. 在 Android 低内存设备上 (armeabi-v7a 32位机型) 极易触发 OOM 4. 即使后续收到 clear 信号,GC 压力也会显著增加 【修复方案】 1. 将 List<DTO> 改为 LinkedHashMap<String, DTO>,以 id 作为 key: - 自动去重,避免同一成员/群组多次添加 - 保持插入顺序,符合原有顺序遍历语义 2. 引入容量上限常量 MAX_GROUP_MEMBERS=500 / MAX_GROUP_INFOS=100 3. 每次 add 前检查 size,超限时移除最旧条目 (LRU 策略) 4. 同步更新 CallBackUtil 中对应的方法签名,改为 Map<String, DTO> 参数 【兼容性】 - API 形态变更,所有调用方已同步更新 (CallBackUtil) - 业务行为不变,仅修复资源泄漏 - 编译通过,无新增废弃 API 使用 【影响范围】 - CallBackResolution.java - CallBackUtil.java |
||
|---|---|---|
| .. | ||
| libs | ||
| src | ||
| .gitignore | ||
| build.gradle.kts | ||
| proguard-rules.pro | ||