10

それはバグですか、MediaPlayerそれとも準備中にリリース、停止、または強制終了することはできませんか?

MediaPlayerで実行中のインスタンスがあります。Service停止、解放、null に設定すると、正常に停止MediaPlayerますしかし、停止、解放、準備状態の場合は null に設定すると、そうではありません。

onPrepared()停止、解放、null への設定の後に呼び出されます。これに対するいくつかの回避策はありますか?

MediaPlayerユーザーが準備が完了する前に停止したい場合は、一般的なユースケースだと思います。

4

2 に答える 2

15

MediaPlayerdocumentationを見るとstop()、初期化されていないオブジェクトを呼び出すことはできません。まだ実行中/準備ができていないものを停止できないため、これは理にかなっています。

一方、のソースコードをrelease()見ると、そのトリックを実行しているように見えます。MediaPlayer

ただし、ブール値フラグを追加して、MediaPlayerオブジェクトがもう必要ないことを示し、そのフラグを使用してオブジェクトonPrepared()が呼び出された場合に解放しても害はありません。

擬似コードは次のようになります。

public void cancel(){
 mCancel = true;
}

public void onPrepared(MediaPlayer player){
  if(mCancel){
   player.release();
   //nullify your MediaPlayer reference
   mediaPlayer = null
  }
}
于 2013-05-14T13:55:04.620 に答える
2

別の解決策は、OnBufferingUpdateListener を実装し、次のようにそのメソッドをオーバーライドすることです。

@Override
public void onBufferingUpdate(MediaPlayer mp, int percent) {
    if (cancel) {
        mp.release();
        mMediaPlayer = null;

    }
}
于 2016-06-18T12:24:22.740 に答える