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

Fragment中MediaPlayer在应用退后台/关闭后持续播放的问题求助

Fragment中MediaPlayer在应用退后台/关闭后持续播放的问题求助

我是一名独立开发者,目前还在学习阶段。最近尝试用Fragment做游戏的菜单界面,其中有个功能是预览和设置背景音乐,于是我写了MusicFragment,代码如下:

public class MusicFragment extends Fragment {

Music music = new Music();

// more code //

private void previewSong() {
    music.playSong(getActivity(), "Song_1", milliseconds);
}

private void stopSong() {
    music.stopPlayer();
}

}

另外我单独写了一个Music类来处理音乐播放逻辑,代码是这样的:

public class Music extends Activity {

MediaPlayer player;

public void playSong(Context context, String songName, int milliseconds) {
    if(player == null) {
        player = MediaPlayer.create(context, R.raw.song1);
        player.seekTo(milliseconds);
        player.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mp) {
            }
        });
    }
    player.start();
}

public void stopPlayer() {
    if(player !=null) {
        player.stop();
        player.reset();
        player.release();
        player = null;
    }
}

public String playerStatus() {
    if(player == null) {
        return "player is null";
    } else {
        return "player is NOT null";
    }
}

}

现在我能在Fragment里正常启动和停止音乐,但遇到一个头疼的问题:如果用户预览音乐后,没在MusicFragment里调用stopPlayer()就直接关闭/最小化应用,音乐还会继续播放,不会停止。

我之前误以为Fragment没有onPause()方法,所以想着在MainActivity的onPause()里处理,但调用Music类的playerStatus()时,返回的居然是“player is null”——可实际上此时音乐明明还在设备上播放着。

我试过把MediaPlayer直接放到MusicFragment里,结果还是一样的。本来如果Fragment有onPause()的话,直接在里面调用stopSong()就解决了,现在感觉自己没搞懂某个Android基础概念,真心希望能得到大家的帮助!

备注:内容来源于stack exchange,提问作者Jason W

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 13:57:34