Error al eliminar el fragmento que contiene videoView en 4.0.4

Tengo un fragmento que contiene VideoView y algunas otras vistas.

public class PlayerPane extends Fragment { ... // static variables private ImageView imageView; private ImageView gifView; private VideoView videoView; private WebView webView; private PDFView pdfView; private MyScrollTextView scrollTextView; private MediaPlayer audioPlayer; ... @Override public void onDestroyView() { if (videoView != null && videoView.isPlaying()) { LOGGER.info("Stopping videoView"); videoView.stopPlayback(); videoView.suspend(); videoView = null; } super.onDestroyView(); } 

Cada vez que elimino este fragmento mientras se está reproduciendo el video, IllegalStateException se está lanzando sólo en Android 4.0.4 (No hay problema con versiones anteriores a 4.0.4).

La siguiente es la excepción:

 java.lang.IllegalStateException at android.media.MediaPlayer._reset(Native Method) at android.media.MediaPlayer.reset(MediaPlayer.java:1236) at android.widget.VideoView.release(VideoView.java:549) at android.widget.VideoView.access$2300(VideoView.java:49) at android.widget.VideoView$6.surfaceDestroyed(VideoView.java:537) at android.view.SurfaceView.updateWindow(SurfaceView.java:581) at android.view.SurfaceView.onWindowVisibilityChanged(SurfaceView.java:290) at android.view.View.dispatchDetachedFromWindow(View.java:9823) at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:2266) at android.view.ViewGroup.removeViewInternal(ViewGroup.java:3588) at android.view.ViewGroup.removeViewInternal(ViewGroup.java:3568) at android.view.ViewGroup.removeView(ViewGroup.java:3516) at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:951) at android.app.FragmentManagerImpl.removeFragment(FragmentManager.java:1123) at android.app.BackStackRecord.run(BackStackRecord.java:592) at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1382) at android.app.FragmentManagerImpl$1.run(FragmentManager.java:426) at android.os.Handler.handleCallback(Handler.java:605) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:4424) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 

Así es como elimino el fragmento:

 getFragmentManager.beginTransaction().remove(fragmentToBeRemoved).commit(); 

¿Qué está causando esta IllegalStateException y cómo resuelvo esto? Cualquier cosa apuntando hacia la solución sería de gran ayuda.

Le sugiero que adopte un enfoque diferente. Antes de quitar el fragmento. Llame a este código antes de intentar quitar el fragmento.

 videoView.stopPlayback(); videoView.suspend(); 

Como es evidente a partir de la traza de pila, cuando se elimina el fragmento, lo que hace Android es quitar el VideoView (es una vista después de todo) lo que resulta en Videoview Intentando liberar el Mediaplayer subyacente. Pero el Mediaplayer en sí podría no ser un estado para ser liberado que está causando este problema. Lo ideal sería que este pozo podría haber sido manejado dentro de VideocView, pero parece que no

Creo que usted llama reset () después de la liberación () y este throw ilegalstateexception.

Vea el código que aparece en esta URL. Esto es del reps real del github del androide. https://github.com/android/platform_frameworks_base/blob/866658261f4613e17ed6f39a74975ad0c9f40767/media/jni/android_media_MediaPlayer.cpp

La función de restablecimiento de java llama a la función _reset nativa que se da en el archivo CPP en esta URL, esto es muy difícil de depurar, ya que es una llamada JNI que no se puede depurar. Así que, en mi opinión, es muy difícil saber qué va mal a menos que realmente sepamos qué es exactamente lo que está haciendo

  • Android: ¿Cualquier forma de reducir el retardo de los medios / latencia en VideoView / MediaPlayer?
  • Fragmento retenido no retenido
  • Android 3.1 / Galaxy Tab / VideoView no se reproducirá
  • YouTubePlayerFragment no funciona (Reproduciendo) en CollapsingToolbarLayout
  • Cómo reproducir varios archivos de video simultáneamente en un diseño lado a lado en diferentes vistas en Android
  • Reproducción de vídeo cuando la actividad está oculta
  • Android 4.1 - RTSP con VideoView y MediaController
  • Mover vídeo ... usar animación de traducción
  • Problemas para conseguir que el video se reproduzca en Recyclerview
  • El botón de retroceso de Android no funciona mientras se reproduce vídeo en VideoView
  • Reproducción de vídeo desde el servidor http en android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.