【问题标题】:MediaPlayer Reset takes long timeMediaPlayer 重置需要很长时间
【发布时间】:2014-03-29 03:03:58
【问题描述】:

我的应用正在使用ServiceMediaPlayer 流式传输音乐,但在尝试重置媒体播放器以播放下一首曲目时出现问题。尽管我在另一个线程中调用它,但重置媒体播放器需要很长时间,并且在多次快速按下下一次时会导致 UI 冻结一段时间。

这是我用来播放列表中曲目的 sn-p 代码

private void playTrack(int position) {
    if (!isAudioFocusAvailable())
        return;
    try {
        sendBufferingStarted();
        // Problem is here
        mPlayer.reset();
        mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
        mPlayer.setDataSource(mTracks.get(mCurrentPosition).getUrl());
        mIsBuffering = true;
        mPlayer.prepareAsync();
        mIsPaused = false;
        acquireWifiWakeLock();
    } catch (IllegalArgumentException e) {
        e.printStackTrace();
    } catch (IllegalStateException e) {
        e.printStackTrace();
    } catch (IOException e) {
    }

}

任何避免重置和 UI 冻结问题的建议

【问题讨论】:

    标签: android media-player android-service android-music-player background-music


    【解决方案1】:

    试试这个代码可能会有所帮助

    public void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);
    
        if(!isPlaying){
            mPlayer = new MediaPlayer();
            mPlayer.setDataSource(soundid[position]);
            mPlayer.prepare();
            mPlayer.start();
            isPlaying = true; // reproducir es true
    
        }else{
    
            isPlaying = false;
            mPlayer.stop();
            mPlayer.reset();
            mPlayer.setDataSource(soundid[position]);
            mPlayer.prepare();
            mPlayer.start();
            isPlaying = true;
    
        }
    
        mPlayer.setOnCompletionListener(new OnCompletionListener() {
    
            public void onCompletion(MediaPlayer mPlayer) {
                mPlayer.release();
                isPlaying = false;
            }
    
        });
    }
    

    【讨论】:

      猜你喜欢
      • 2012-10-01
      • 2011-02-10
      • 2017-10-24
      相关资源
      最近更新 更多