Skip to content

v1.1.1

Latest

Choose a tag to compare

@github-actions github-actions released this 10 Sep 00:34
· 47 commits to Android since this release

主要更新

perf: 播放引擎迁移专用线程并接入官方下一曲预加载(eade37f)

  • 新增 SPlayerPlayback HandlerThread(THREAD_PRIORITY_AUDIO)作为 ExoPlayer、MediaSession 与 DefaultPreloadManager 的统一 application looper;引擎交互经 runOnPlaybackThread(异步)/onPlaybackThread(同步 latch)收口,公开方法收敛为薄派发层 + @Synchronized 内部实现
  • 跨线程读取播放状态改走快照:cachedIsPlaying/cachedIsBuffering/cachedPlaybackRate/lastKnownPositionMs 由 250ms tick 与各 emit 点维持,getLyricPositionMs/getLyricPlaybackRate/getPositionMs 按线程判定返回
  • 接入 media3 DefaultPreloadManager:预载下一曲开头 10s(specifiedRangeLoaded 参数为微秒),URL 就绪即调度;起播按 URL 命中复用 PreloadMediaSource 免首帧缓冲,命中后移出管理器避免条目累积
  • PlaybackQueue 新增 peekUpcomingTracks(跳过 skipSong、右缘回绕,与 advanceRaw 选曲口径一致)供预加载取下一曲
  • syncApiContext/setFftEnabled/setSpectrumAlgorithm 一并收口到播放线程,修复桥线程触达 preloadManager 的线程违规

fix: Service主线程立即升级前台修复FGS启动超时闪退(8613eaf)

  • 问题:播放线程迁移后 attachService 异步派发,startForeground 依赖播放线程空闲。playIndexAtInternal 在播放线程 startForegroundService 后,播放线程正被引擎重初始化(ExoPlayer/DefaultPreloadManager 构建)占用,慢环境下超过 FGS 启动时限(Android 14+ 收紧至约 10s),系统抛 ForegroundServiceDidNotStartInTimeException 直接杀主线程导致闪退与设备卡死
  • 修复:PlaybackService.onCreate 在主线程先用占位通知立即 startForeground,再异步挂载播放线程,FGS 启动时限与播放线程拥塞彻底解耦;引擎就绪后 updateNotification 仍替换为带 MediaStyle 的完整通知
  • PlaybackManager 新增 ensureNotificationChannel(幂等渠道创建)与 buildStartupNotification(占位通知)
  • 验证:模拟器与 x86_64 设备冷启动即点歌 + 连续切歌,FATAL/FGS 超时 0 次,startForegroundCount 正常递增,渠道 splayer_playback 挂载 MediaStyle 通知正常

Full Changelog: v1.1.0...v1.1.1