Skip to content

fix: 修复失败 CL 续播崩溃 + 随机播放全部 - #2

Merged
0Sakura721 merged 1 commit into
mainfrom
fix/resume-crash-shuffle
Jul 10, 2026
Merged

0Sakura721 merged 1 commit into
mainfrom
fix/resume-crash-shuffle

Conversation

@0Sakura721

Copy link
Copy Markdown
Owner

摘要

延续 PR#1 的「失败 CL」修复,本次彻底解决续播不可用问题并借鉴 Auxio 增加随机播放入口。

修复:续播崩溃(失败 CL 的真正症状)

  • PlayerService 增加 prepared 状态机:应用重启经 restoreQueue 恢复队列后,MediaPlayer 尚未 prepare,此时点迷你播放器播放会直接 start() 抛 IllegalStateException 崩溃。改为未准备时走 playAt 准备,准备完成后再 seek 到续播位置。
  • 续播位置在 ACTION_PLAY 与 ACTION_PLAY_PAUSE 两条路径均正确应用。
  • pause()/seekTo() 增加 prepared 守卫,避免非法状态崩溃。

改进:续播更可靠

  • 播放中每约 15s 周期持久化进度,避免被系统强杀后续播位置丢失。
  • 首曲 onPrepared 时若可视化未初始化则补建(与均衡器兜底对称)。

新功能:随机播放全部(借鉴 Auxio)

  • 曲库顶栏「随机」按钮,一键打乱全部歌曲并开始播放,不改动播放模式记忆。

约束

  • 零额外依赖,安装包仍 <10MB(仅 armeabi-v7a / arm64-v8a)。
  • CI:GitHub Actions 自动构建 debug/release APK 验证编译通过。

- PlayerService: 增加 prepared 状态机,未准备时走 playAt 准备而非直接
  start(),彻底修复 restoreQueue 恢复后点播放的 IllegalStateException 崩溃
  (PR#1 只修了队列被覆盖,未修此崩溃,续播依旧不可用)
- 续播位置在 ACTION_PLAY 与 ACTION_PLAY_PAUSE 两条路径均正确应用
- 播放中每约 15s 持久化进度,避免系统强杀导致续播位置丢失
- 首曲 onPrepared 时若可视化未初始化则补建(与均衡器兜底对称)
- LibraryFragment: 顶栏「随机」按钮一键打乱全部歌曲播放(借鉴 Auxio)
- 同步更新 README
@0Sakura721
0Sakura721 merged commit e441484 into main Jul 10, 2026
1 check passed
@0Sakura721
0Sakura721 deleted the fix/resume-crash-shuffle branch July 10, 2026 18:13
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