You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 10:33:19