Android: MediaPlayer finalizado sin ser lanzado

Estoy utilizando la clase MediaPlayer en una aplicación en la que estoy trabajando actualmente. Quiero mantener una instancia de la clase MediaPlayer durante la vida de mi actividad. Estoy liberando los recursos de la clase MediaPlayer en el método onPause () {} de la actividad, sin embargo, cuando se inicia la actividad, veo la siguiente advertencia emergente en la ventana de LogCat:

W/MediaPlayer-JNI(16795): MediaPlayer finalized without being released 

¿Alguna idea de lo que estoy haciendo mal aquí o cómo eliminar esta advertencia? No parece causar ningún problema y el sonido funciona bien.

Tengo un poco demasiado código para publicar porque he envuelto algunos objetos para permitir que el estado sea administrado (la clase MediaPlayer no proporciona actualmente información de estado), y varias otras razones, pero el código es más o menos:

 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); initialiseSounds(this); } @Override protected void onPause() { soundManager.releaseResources(); } @Override protected void onResume() { initialiseSounds(this); } 

Con este método en mi clase SoundManager:

 public void releaseResources() { player.release(); } 

Y en initialiseSounds estoy haciendo:

 MediaPlayer player = new MediaPlayer(); player.reset(); player.setAudioStreamType(AudioManager.STREAM_MUSIC); AssetFileDescriptor assetFileDescriptor = context.getResources().openRawResourceFd(resourceId); setDataSource(player, assetFileDescriptor); 

Cuando quiero jugar la pista que hago:

 player.prepare(); player.start(); 

Apreciar cualquier consejo,

Gracias,

3 Solutions collect form web for “Android: MediaPlayer finalizado sin ser lanzado”

No estoy completamente seguro del origen de ese mensaje, pero tenga en cuenta que está creando dos MediaPlayers: uno en onCreate y uno en onResume.

Ese mensaje parece indicar que no le gusta que un MP esté siendo finalizado (GC'd) sin ser 'liberado'. Puede referirse a ese primer mediaPlayer que creas en onCreate, que se pierde después de reasignarlo en onResume.

Tal vez el error desaparecerá si sólo crea un MediaPlayer en lugar de dos?

He encontrado problema similar Llamar el método en onStart () o onResume, no lo llaman en onCreate ().

Este mensaje también aparece si no llama al release en el objeto de reproductor de medios y su fragmento se detiene y se destruye.

Es necesario anular onStop() o uno de los otros métodos y call release () en el reproductor de medios.

 @Override public void onStop() { super.onStop(); mediaPlayer.stop(); mediaPlayer.release(); } 
  • Android Socket problema en Samsung Galaxy S4 (SGS4)
  • Error de MediaPlayer de Android (-38,0)
  • Streaming de audio desde una URL en Android usando MediaPlayer?
  • La superficie se ha liberado cuando intento setDisplay to MediaPlayer
  • Mediaplayer cortando el sonido demasiado pronto
  • Android MediaPlayer.getCurrentPosition () devuelve valores incorrectos
  • MediaPlayer salta hacia adelante unos 6 segundos en rotación
  • Reproducir audio entre los puntos A y B
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.