当前位置: 代码迷 >> Android >> 准备时如何释放媒体播放器
  详细解决方案

准备时如何释放媒体播放器

热度:71   发布时间:2023-08-04 12:02:20.0

我正在使用MediaPlayer在音乐播放器应用程序上进行音乐流传输。 流媒体工作正常,但现在我想要如果用户按下活动的后退按钮,则它应立即停止准备并释放媒体播放器。

当前,当它正在准备中并且如果活动被破坏时,我将像这样释放MediaPlayer但是当它释放它时,它将挂起应用程序并显示ANR。

@Override
protected void onDestroy() {
    super.onDestroy();
    if(mediaPlayer!=null) {
        mediaPlayer.stop();
        mediaPlayer.release();
    }
}

我正在像下面一样初始化MediaPlayer

mediaPlayer = null;
mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setDataSource("http://www.samisite.com/sound/cropShadesofGrayMonkees.mp3");

现在,我想要当它开始准备然后在onDestory释放时按回压,那么它不应该挂起该应用程序并顺利释放媒体播放器。

请帮我什么是最好的方法。 在此先感谢mediaPlayer.prepareAsync();

在检查答案。 以及来自Android代码的 。

编辑:

@TGMCians我向他展示了所提供的链接,因此,如果播放仍未准备就绪或准备就绪,他将无法调用stop()直到调用onPrepared 我不确定在应用程序onDestroy调用之后onPrepared继续调用。 因此,我认为的完整片段是:

     private boolean mPrepared = false;
     private boolean mCancel = false;
        public void onPrepared(MediaPlayer player){
            mPrepared = true;
            if(mCancel){
                player.release();
                mPrepared = false;
                mCancel = false;
                //nullify your MediaPlayer reference
                mediaPlayer = null;
            }
        }
        private void cancelMedia(){
            mCancel = true;
        }
        @Override
        protected void onDestroy() {
            super.onDestroy();
            cancelMedia();
            if (mediaPlayer != null && mPrepared) {
                mediaPlayer.stop();
                mediaPlayer.release();
                mPrepared = false;
                mediaPlayer = null;
            }
        }
  相关解决方案