[Bug]: tts听书的下一章内容获取依赖于前台运行的界面实例,导致app后台或者手机锁屏时tts听书不会自动跳转到下一章节
Prerequisites|前提条件
- [x] I have checked the troubleshooting|我已经查看过故障排除
- [x] I have searched for similar issues and did not find any|我已经搜索过没有相同的问题
Describe the bug|描述问题
可能原因: 内容获取耦合依赖一个在前台运行的 InAppWebView 组件,而一旦应用进入后台或设备锁屏,WebView 的 JavaScript 执行会受到严格限制或完全暂停。
1、跳转章节依赖 WebView:当 TTS 播放到章节末尾,需要跳转到下一章时,它会调用 ttsNextSection() ([anx-reader/lib/page/book_player/epub_player.dart:287]。这个 Dart 方法同样会执行一个名为 ttsNextSection() 的 JavaScript 函数。这个 JS 函数负责处理复杂的逻辑:在当前 WebView 中加载下一章的 HTML 内容 - 渲染新章节的页面 - 定位到新章节的开头 - 返回第一句文本给 TTS 引擎。 2、当应用进入后台或手机锁屏时,为了节省电量和系统资源,iOS 和 Android 都会暂停 WebView 中 JavaScript 的执行。虽然 audio_service 可以让音频在后台继续播放,但当 TTS 引擎播放完当前章节的最后一句,并尝试通过 ttsNextSection() 回调请求下一章内容时,问题就出现了。此时,由于 WebView 处于“休眠”状态,ttsNextSection() 的 JavaScript 调用无法执行或被无限延迟。因此,Dart 端的 TtsHandler 永远等不到下一章的文本数据。最终结果就是,TTS 播放完当前章节后就停止了,无法自动加载并朗读下一章。
结论: 要想实现后台自动跳转章节,必须重构数据获取逻辑,使其摆脱对前台 WebView 的依赖。把tts内容与界面解除耦合,例如,可以在 Dart 层预先解析 EPUB 文件,将章节内容缓存起来,这样 TTS 服务在后台也能直接从内存或数据库中获取下一章的文本,而无需与“休眠”的 WebView 交互。
To reproduce|重现步骤
- 打开听书
- 手机锁屏或后台播放
- 等待听书到章节结束
- tts可能暂停(取决于手机的省电策略,后台策略等,可以适当等时间长的后台测试)
- app恢复前台
- 恢复播放。
Expected behavior|预期行为
tts在后台能不中断播放下一章
Screenshots|截图
No response
Platform (please complete the following information)|平台(请填写以下信息)
- Platform: | 平台: Android
- OS: | 操作系统: [e.g. Android13(MIUI14)] 澎湃os2
- AnxReader Version: | 安读版本: 1.8.1
- Device: | 设备: 红米k60
Additional context|其他信息
No response
👋 感谢您提交bug报告!
我注意到您的平台信息可能不够完整。为了更好地帮助您解决问题,请提供以下完整信息:
- Platform | 平台:(如: Android, iOS, Windows, macOS, Linux)
- OS | 操作系统:(如: Android 13 (MIUI 14), iOS 17.1, Windows 11)
- AnxReader Version | 安读版本:(如: 1.6.3+2100,可在应用设置中查看)
- Device | 设备:(如: Xiaomi 13, iPhone 15, ThinkPad X1)
请编辑您的issue并填写完整的平台信息,这将帮助我们更快地定位和解决问题。
Thank you for submitting this bug report!
I noticed that your platform information might be incomplete. To better help you solve the issue, please provide complete information for:
- Platform: (e.g., Android, iOS, Windows, macOS, Linux)
- OS: (e.g., Android 13 (MIUI 14), iOS 17.1, Windows 11)
- AnxReader Version: (e.g., 1.6.3+2100, check in app settings)
- Device: (e.g., Xiaomi 13, iPhone 15, ThinkPad X1)
Please edit your issue and fill in the complete platform information to help us locate and resolve the issue faster.
开发大大您好,tts还有一个问题:当前听的分段,在下一页也有内容时,不能自动及时翻页
是的,我也怀疑是这个问题。但是具体怎么解决还没有好的方法
我也正想反馈这个BUG:tts听书(系统朗读)不会自动跳转到下一章节
Platform | 平台: Android OS | 操作系统: Android 11 (realmeUI 2.0) AnxReader Version | 安读版本: 1.9.2 Device | 设备: realme X2 Pro