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(); } 
  • Androids MediaPlayer reproduce video cada dos veces que la actividad entra
  • Android: error al abrir el archivo de rastreo: ningún archivo o directorio de este tipo
  • Utilizando IntentService para la reproducción de MediaPlayer
  • MediaPlayer onCompletion no se llama con precisión
  • No se puede obtener android MediaPlayer onCompletion para disparar
  • ExoPlayer de Android stream mp3 a través de HTTP
  • Android mediaPlayer - ¿hay un método "isPrepared ()" o "getStatus ()"?
  • Reproduce la lista de archivos mp3 con MediaPlayer en Android
  • Android muestra flujo de vídeo en MediaPlayer y codifica con MediaCodec
  • Detener Android MediaPlayer iniciado automáticamente por la página web en WebView
  • Reproductor multimedia reproducir pausa en android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.