Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/212.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android MediaPlayer重置需要很长时间_Android_Media Player_Android Service_Android Music Player_Background Music - Fatal编程技术网

Android MediaPlayer重置需要很长时间

Android MediaPlayer重置需要很长时间,android,media-player,android-service,android-music-player,background-music,Android,Media Player,Android Service,Android Music Player,Background Music,我的应用程序正在使用服务和MediaPlayer流式播放音乐,但我在尝试重置MediaPlayer以播放下一首曲目时遇到问题。重设mediaplayer需要很长时间,当我在另一个线程中调用它时,多次快速按next会导致UI冻结一段时间 下面是我用来播放列表中曲目的代码片段 private void playTrack(int position) { if (!isAudioFocusAvailable()) return; try { sendBu

我的应用程序正在使用
服务
MediaPlayer
流式播放音乐,但我在尝试重置MediaPlayer以播放下一首曲目时遇到问题。重设mediaplayer需要很长时间,当我在另一个线程中调用它时,多次快速按next会导致UI冻结一段时间

下面是我用来播放列表中曲目的代码片段

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) {
    }

}

任何避免重置和用户界面冻结问题的建议

请尝试此代码,它可能会有所帮助

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;
        }

    });
}