本文档记录 QYTech CD-ROM (io.github.qytech:cdrom) 驱动与服务库的所有重要版本更新与变更。
CdromRipManager,彻底解除抓轨任务与 Activity / ViewModel 生命周期的绑定。即使界面退出、屏幕旋转、销毁调用 controller.release(),后台抓轨任务依然在守护单例中平稳运行,绝不误杀。CdromRipService):库内置 Android 前台服务与 PARTIAL_WAKE_LOCK,利用 Manifest Merger 自动注入宿主(宿主无需额外配置 Manifest),有效防止 App 切入后台或息屏时被 Android 系统限制冻结(cgroup freezer)或查杀。controller.ripStatus: StateFlow<CdromRipStatus>(支持 Idle、Preparing、Ripping、Completed、Cancelled、Error),新页面或重建页面打开时可立即无缝同步正在抓轨的音轨与精准百分比。controller.startRipTrack(track, path, speed)、controller.cancelRip()、controller.addRipProgressListener 等接口;原有同步阻塞接口 saveAudioTrackToFile(...) 完全向后兼容并自动获得保活保护。CdromController.release() 内部语义:后台抓轨任务活跃时自动保护底层 Native 控制器与硬件设备 fd,仅清理当前 UI 局部监听与 Handler 回调,杜绝资源泄漏与任务误杀。.wav.tmp 临时文件流式写入,100% 完整抓取并校验通过后原子重命名至最终目标 .wav。中途取消或硬件报错立即物理清理,杜绝在磁盘遗留几秒残缺破损文件。ioMtx 与 ripMtx),抓轨自动安全排斥并发播放,杜绝多线程竞争底层 ioctl。CdromTrayCloseEvent 关仓事件(CLOSING、DISC_READY、CLOSED_EMPTY),支持精准感知关仓机械动作与盘片稳定状态。CdRomDeviceListener 新增 onTrayCloseEvent(event: CdromTrayCloseEvent) 回调。discid_get_id 获取失败问题。HeapTaskDaemon 异常问题。speed,默认使用 32x 倍速以提高抓取效率。onTrackChanged(trackIndex: Int)。CdPlayer 中 DTS-CD 播放失败问题。monitorUeventLoop 线程异常退出问题。CdPlayer 架构,底层采用 Google Oboe 实现高性能音频回放,显著降低延迟。CdromController 与播放逻辑解耦,专注于硬件控制和数据提取。getDiscId 和 getFreeDBDiscID 可能返回相同 ID 的哈希冲突问题。