Android: MediaPlayer 未按预期发布
Android: MediaPlayer not getting released as expected
所以我有一个带有 ListView 的应用程序,可以在其中一个片段中播放音频。问题是,一些用户报告说应用程序在点击一定数量后停止播放音频。我知道这是一个与 MediaPlayer 未正确发布有关的问题,但我找不到不发布它的地方。希望大家帮帮忙。
这里是 MyAudioFragment.java 中使用 MediaPlayer 的地方。我相当确定问题出在这些代码行中。
MyAudioFragment.java
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
if(MainActivity.mediaPlayer != null && MainActivity.mediaPlayer.isPlaying()){
MainActivity.mediaPlayer.release();
MainActivity.mediaPlayer = new MediaPlayer();
}
MainActivity.mediaPlayer = MediaPlayer.create(getContext(), MainActivity.hashMap.get(adapterView.getItemAtPosition(i)));
MainActivity.mediaPlayer.start();
}
});
这里是我在 MainActivity.java
中处理 MediaPlayer 的地方
//...
public static MediaPlayer mediaPlayer;
//...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//...
//Layout stuff
mediaPlayer = new MediaPlayer();
//Setting up fragment stuff
//...
}
@Override
public void onPause(){
super.onPause();
mediaPlayer.stop();
mediaPlayer.release();
}
@Override
public void onResume(){
super.onResume();
mediaPlayer = new MediaPlayer();
}
编辑:有没有可能是我没有发布它"OnCompletion"?
在 onCompletion 上,您必须执行 release();
所以我有一个带有 ListView 的应用程序,可以在其中一个片段中播放音频。问题是,一些用户报告说应用程序在点击一定数量后停止播放音频。我知道这是一个与 MediaPlayer 未正确发布有关的问题,但我找不到不发布它的地方。希望大家帮帮忙。
这里是 MyAudioFragment.java 中使用 MediaPlayer 的地方。我相当确定问题出在这些代码行中。
MyAudioFragment.java
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
if(MainActivity.mediaPlayer != null && MainActivity.mediaPlayer.isPlaying()){
MainActivity.mediaPlayer.release();
MainActivity.mediaPlayer = new MediaPlayer();
}
MainActivity.mediaPlayer = MediaPlayer.create(getContext(), MainActivity.hashMap.get(adapterView.getItemAtPosition(i)));
MainActivity.mediaPlayer.start();
}
});
这里是我在 MainActivity.java
中处理 MediaPlayer 的地方//...
public static MediaPlayer mediaPlayer;
//...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//...
//Layout stuff
mediaPlayer = new MediaPlayer();
//Setting up fragment stuff
//...
}
@Override
public void onPause(){
super.onPause();
mediaPlayer.stop();
mediaPlayer.release();
}
@Override
public void onResume(){
super.onResume();
mediaPlayer = new MediaPlayer();
}
编辑:有没有可能是我没有发布它"OnCompletion"?
在 onCompletion 上,您必须执行 release();