Cordova安卓后台5分钟后JavaScript宏任务无法执行问题求助
Cordova音乐播放器后台异步代码挂起问题
我正在使用Cordova开发一款音乐播放器应用,采用官方Media Plugin实现播放功能。在播放完成的成功回调中,我需要异步获取下一首曲目并启动播放,但安卓端应用后台运行数分钟后,会卡在获取下一曲的环节。
经排查发现:仅当回调中使用异步代码时会出现该问题——同步代码可正常执行,但后续的宏任务完全无法运行。重新打开应用后,执行会恢复正常。
我已经尝试过以下方案,但均未解决问题:
- 通过music-controls2插件启动了前台服务(foreground service)
- 启用唤醒锁(wake locks)、WiFi锁(wifi locks)
- 使用Web Workers
- 禁用电池优化
以下是复现问题的示例代码:
document.addEventListener('deviceready', onDeviceReady, false); function onDeviceReady() { // 启动前台服务 MusicControls.create({ track: 'The track', artist: 'The artist', album: 'The album', isPlaying: true, }); startNextTrack(); } let media = null; async function startNextTrack() { console.log('Starting next track'); // 模拟异步获取下一曲目 await new Promise(resolve => setTimeout(resolve, 5000)); console.log('Promise is resolved'); media = new Media( 'file:///android_asset/www/test.mp3', () => { console.log('Media: Success callback'); if (media) { media.release(); } startNextTrack(); }, ); media.play(); }
日志表现
- 应用刚进入后台时可正常运行,每次播放曲目都会输出:
Starting next track Promise is resolved Media: success callback
- 后台运行数分钟后,曲目播放完毕时仅输出:
Starting next track
随后应用无限挂起。
内容的提问来源于stack exchange,提问作者leonie
相关产品推荐
相关产品推荐

