0

Service私のアプリはとを使用して音楽をストリーミングしMediaPlayerていますが、メディアプレーヤーをリセットして次のトラックを再生しようとすると問題が発生します。mediaplayer のリセットに時間がかかり、別のスレッドで呼び出しても、次へをすばやく複数回押すと、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) {
    }

}

リセットと UI フリーズの問題を回避するための提案

4

1 に答える 1

0

このコードを試してみてください

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

    });
}
于 2014-03-29T04:31:54.790 に答える