Skip to content

fix: 修复多应用音量资源释放与写入积压,避免后台启动触发 Root 检测 - #39

Closed
Ashurinnn wants to merge 1 commit into
Ianzb:masterfrom
Ashurinnn:fix/app-volume-lifecycle-root
Closed

Ashurinnn wants to merge 1 commit into
Ianzb:masterfrom
Ashurinnn:fix/app-volume-lifecycle-root

Conversation

@Ashurinnn

Copy link
Copy Markdown
Contributor

多应用音量在视图重建或面板意外 detach 后可能保留旧视图和官方音量列;快速拖动且音频 IPC 较慢时,逐事件任务会积压,SystemUI 与 MiSound 还会重复写入音频服务。后台 Hook 状态广播冷启动模块时,也会附带触发 Root 检测。

问题

  • 音量弱引用表仍可保活旧视图,面板意外脱离窗口时未释放官方音量列。
  • 多音量拖动同时走 SystemUI、MiSound 两路写入,无界任务队列可能积压。
  • 状态广播冷启动模块后,会执行 su -c id;全局浏览器 Hook 扩大了触发范围。

改动

  • 修复音量入口及 MiSound 百分比索引的引用关系:helper 由入口 View 自身持有,控制器、百分比索引与异步回调采用弱引用。
  • 按每次面板显示独立管理官方音量列,在关闭、动画取消、detach、替换及构建异常时幂等释放;忽略过期播放探测结果,避免关闭后重新弹出。
  • 按完整 UID 合并尚未执行的最新音量值,保留松手最终值。SystemUI 直接写入成功后,MiSound 仅同步官方镜像;直接写入失败和旧广播继续走原写入兜底。
  • Root 自动检测改为首次进入 MainActivity 时触发,保留状态卡片手动重检,并为检测子进程增加 30 秒等待超时及清理;后台状态接收与 LSPosed 服务绑定继续初始化。

兼容性

保留 #36 的共享 UID、同 UID 多播放器及解析逻辑,原有音量列、动画时长与高度自动调用链不变。未修改权限、作用域、LSPosed 入口、原生库或主线发布版本字段。SystemUI 与 MiSound 均加载新版后才会启用完整去重;旧进程仍可调节音量。

验证

  • :hook:testDebugUnitTest、:app:testDebugUnitTest、:app:assembleDebug、:app:lintDebug 均通过。
  • 共 51 项单元测试通过,新增 17 项,覆盖写入合并与最终值、共享 UID 去重/兜底、资源重复释放与新旧面板隔离、Root 拒绝及超时;lint 0 错误、38 警告、1 提示。
  • 已完成真机功能测试,功能无异常。

当前修复未进行多设备测试,有待后续观察。

@Ashurinnn Ashurinnn closed this Oct 15, 2026
@Ashurinnn

Copy link
Copy Markdown
Contributor Author

补充说明关闭原因:本 PR 的 CI 已通过,此前已覆盖的真机功能测试也通过,但后续发现可能与其他 LSPosed 模块存在兼容性冲突,冲突来源和触发条件仍需进一步排查确认。

因此先主动关闭此 PR,暂缓合并,待后续完成兼容性排查后再决定如何继续推进。此前的 CI 和真机测试结果不代表跨模块兼容性已得到验证。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant