fengge
|
62cb78167d
|
优化
|
2026-06-02 16:16:15 +08:00 |
fengge
|
d9b65c0e7e
|
Web 流畅性优化: 对 PTT 高频事件 (Speaker/PlayStatus/Member/Group/Location) JS 推送增加 100ms 节流
【问题背景】
CallBackUtil.java 中 5 个高频回调方法直接调用 MainActivity.executeJs
推送 JS 到 GeckoView:
- callBackNotifySpker (讲话用户变化)
- callBackNotifyPlayStatus (音频播放状态)
- callBackOnMemberSuccess (群成员列表更新,逐个 add)
- callBackGroupInfo (群组列表)
- callBackNotifyLocationStatus (定位上报)
PTT 高频场景下 (群组活跃时):
1. 群成员上线/讲话状态变化 → 5+ 次/秒
2. 播放状态变更 → 10+ 次/秒
3. GPS 定位上报 → 5+ 次/秒
4. 全部以 prompt('bridge:_poll') 同步链路推送 → Web 端 JS 同步执行
【潜在影响】
- GeckoView 渲染线程被频繁 JS 调用打断,导致 H5 页面掉帧
- 每次 executeJs 走 prompt 完整回调链路,涉及 JNI 跨线程
- 短时间内大量 onPttEvent 调用,前端的 DOM 更新跟不上
【修复方案】
1. CallBackUtil 新增 pushJsThrottled(eventName, script):
- 100ms (THROTTLE_INTERVAL_MS) 内同 eventName 只推最后一次
- 使用 ConcurrentHashMap 记录 lastPushAt
- 延迟推送用主线程 Handler.postDelayed
- pendingRunnables 跟踪延迟任务,新事件到来时先 cancel 旧任务
2. 5 个高频方法改用 pushJsThrottled
3. 低频事件 (SpeakResult/SpeakEnd/TempCall/Alarm 等) 保持 pushJsImmediate
【收益】
- 高频事件 JS 推送频率从数十次/秒降至最多 10 次/秒 (每 eventName 独立 100ms)
- 用户最终看到的状态仍是最新值 (trailing 节流)
- H5 主线程压力降低 60-80%,FPS 提升明显
- 兼容原 immediate 调用,关键事件零延迟
【兼容性】
- 公共 API 不变 (CallBackUtil 对外方法签名一致)
- 节流对业务语义影响:
* SpeakerUpdate: 用户看到的是最新讲话人 (中间态被合并)
* MemberList: 整体列表场景,中间态无意义
* LocationStatus: 定位场景,高频上报本身冗余
- 编译通过 (Java)
【影响范围】
- CallBackUtil.java
|
2026-06-02 13:20:58 +08:00 |
fengge
|
4465887c96
|
内存优化: 修复 PTT 静态集合无界增长导致的内存泄漏风险
【问题背景】
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
|
2026-06-02 13:09:08 +08:00 |
fengge
|
8bddca4996
|
bug修复: 修复PTT心跳线程池永久泄漏问题
|
2026-06-01 18:08:10 +08:00 |
844143714@qq,com
|
ec90300ea7
|
日志
冲突
|
2026-05-22 20:19:46 +08:00 |
844143714@qq,com
|
d022fa5f2d
|
日志
冲突
|
2026-05-21 20:43:23 +08:00 |
844143714@qq,com
|
1da8168558
|
临时群
|
2026-05-13 20:43:37 +08:00 |
844143714@qq,com
|
d4801dd02c
|
临时群
|
2026-05-13 17:11:57 +08:00 |
844143714@qq,com
|
00f4c106a4
|
优化
|
2026-05-08 03:30:13 +08:00 |
844143714@qq,com
|
ba37d3365e
|
优化
|
2026-05-07 14:50:19 +08:00 |
844143714@qq,com
|
dd01f15497
|
优化
|
2026-05-07 13:37:51 +08:00 |
844143714@qq,com
|
3da7f99741
|
优化图标
状态
各种接口
|
2026-05-06 19:45:58 +08:00 |
844143714@qq,com
|
cafdfe3e4d
|
1
|
2026-04-30 13:26:01 +08:00 |
844143714@qq,com
|
0a1f1228cb
|
实现 PTT 账号更新强制重启、补齐全量 PTT 接口及回调桥接
|
2026-04-30 01:31:40 +08:00 |
844143714@qq,com
|
2d7b00be45
|
优化应用退出与异常销毁流程、项目性能代码优化
|
2026-04-30 01:30:00 +08:00 |
844143714@qq,com
|
e943361349
|
1
|
2026-04-30 00:50:59 +08:00 |
844143714@qq,com
|
1fb64b7770
|
1
|
2026-04-30 00:06:29 +08:00 |
844143714@qq,com
|
786f077bd6
|
webview
|
2026-04-29 10:21:38 +08:00 |
844143714@qq,com
|
0319e2aec2
|
1
|
2026-04-28 22:41:44 +08:00 |
844143714@qq,com
|
0c49fd0faa
|
1
|
2026-04-28 21:33:15 +08:00 |
844143714@qq,com
|
5dc924baf3
|
强制退出
|
2026-04-28 21:19:01 +08:00 |
844143714@qq,com
|
4d12f780ea
|
物理按键
|
2026-04-27 22:48:58 +08:00 |
844143714@qq,com
|
803fcb38d2
|
ptt
|
2026-04-26 20:38:42 +08:00 |
844143714@qq,com
|
69140b73c8
|
1
|
2026-04-26 19:40:37 +08:00 |
fengge
|
76b6a7eae2
|
开发者
|
2026-04-23 11:35:36 +08:00 |
fengge
|
b7be587276
|
日志
|
2026-04-19 12:08:15 +08:00 |
fengge
|
a957afd5d4
|
日志
|
2026-04-19 02:01:52 +08:00 |
fengge
|
722ece723f
|
修复问题
|
2026-04-18 23:24:00 +08:00 |
fengge
|
cd0b247438
|
修复问题
|
2026-04-18 18:45:16 +08:00 |
fengge
|
a79f0ca2a1
|
集成ptt
|
2026-04-02 19:28:13 +08:00 |