Android mediaPlayer 未正确发布
Android mediaPlayer not being correctly released
我正在尝试在单击按钮时在 android 小部件中播放声音,这是我当前的代码:
@Override
public void onReceive(Context context, Intent intent) {
Boolean hasToPlayMedia = false;
MediaPlayer mediaPlayer = new MediaPlayer();
if (intent.getAction().equals("somevalue")) {
mediaPlayer = MediaPlayer.create(context, R.raw.somevalue);
hasToPlayMedia = true;
// OTher conditionals here
}
if (hasToPlayMedia) {
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.start();
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mp.stop();
mp.reset();
mp.release();
mp = null;
}
});
}
super.onReceive(context, intent);
}
然而,在控制台中我读到:
E/MediaPlayer﹕ Should have subtitle controller already set
W/MediaPlayer-JNI﹕ MediaPlayer finalized without being released
有时点击按钮一段时间后不会播放声音。
您必须在 class 内和方法范围外保留对 MediaPlayer 的静态引用。否则,OS 可能会清理其资源,然后当您尝试从 onCompletion() 方法内部访问它时,它将处于非法状态。
我正在尝试在单击按钮时在 android 小部件中播放声音,这是我当前的代码:
@Override
public void onReceive(Context context, Intent intent) {
Boolean hasToPlayMedia = false;
MediaPlayer mediaPlayer = new MediaPlayer();
if (intent.getAction().equals("somevalue")) {
mediaPlayer = MediaPlayer.create(context, R.raw.somevalue);
hasToPlayMedia = true;
// OTher conditionals here
}
if (hasToPlayMedia) {
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.start();
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mp.stop();
mp.reset();
mp.release();
mp = null;
}
});
}
super.onReceive(context, intent);
}
然而,在控制台中我读到:
E/MediaPlayer﹕ Should have subtitle controller already set
W/MediaPlayer-JNI﹕ MediaPlayer finalized without being released
有时点击按钮一段时间后不会播放声音。
您必须在 class 内和方法范围外保留对 MediaPlayer 的静态引用。否则,OS 可能会清理其资源,然后当您尝试从 onCompletion() 方法内部访问它时,它将处于非法状态。