VideoView no se inicia cuando está invisible

Tengo un AsyncTask, donde ocultar una vista de vídeo, iniciar la reproducción de vídeo y mostrar la vista de vídeo cuando el video se reproduce.

Pero el video no se iniciará cuando la vista de vídeo se establece en invisible, la tarea asíncrona se mantiene colgando en onBackground. Si comento esta línea, el video comienza a reproducirse. ¿Por qué la vista de vídeo requiere una superficie visible ?

public void walk(final View v) { new AsyncTask() { @Override protected void onPreExecute() { super.onPreExecute(); mVideoView.setVisibility(View.INVISIBLE); // this line causes video not to start mVideoView.start(); } @Override protected Object doInBackground(Object... objects) { while (!mVideoView.isPlaying()) {} return null; } @Override protected void onPostExecute(Object o) { super.onPostExecute(o); mVideoView.setVisibility(View.VISIBLE); } }.execute(); 

Un poco de fondo por qué estoy haciendo esto: Trato de evitar el conocido problema del flash negro que suele tener al iniciar un video:

Https://stackoverflow.com/search?q=%5Bandroid%5D+videoview+black

Https://stackoverflow.com/search?q=%5Bandroid%5D+video+%5Bmediaplayer%5D+black

El VideoView es realmente un SurfaceView especializado. Un SurfaceView funciona creando otra ventana detrás de la ventana normal (que contiene todas las vistas), y luego tener un área de transparencia para que la nueva ventana (con su propia superficie de dibujo) se pueda ver detrás de ella.

Si un SurfaceView ya no es visible, su superficie será destruida, es decir, SurfaceHolder.Callback.surfaceDestroyed se llama. El VideoView no intentará reproducir su vídeo si no hay una superficie válida, por lo tanto su AsyncTask podrá nunca dejar doInBackground .

La superficie se creará para usted mientras que la ventana de SurfaceView es visible; Debe implementar surfaceCreated (SurfaceHolder) y surfaceDestroyed (SurfaceHolder) para descubrir cuándo se crea y destruye la superficie mientras se muestra y se oculta la ventana.

  • Android: ¿Cualquier forma de reducir el retardo de los medios / latencia en VideoView / MediaPlayer?
  • Lista de vídeos de Android ListView
  • YouTubePlayerFragment no funciona (Reproduciendo) en CollapsingToolbarLayout
  • Error de MediaPlayer de Android (1, -2147483648)
  • Controles de reproducción de vídeo de Android Mostrar "Reproducir" Inicialmente en lugar de "Pausa" Aunque el archivo ya está jugando
  • Comportamiento extraño - Fragmento de VideoViewer no funciona con MediaController
  • VideoView dentro de DialogFragment
  • Detectar si un VideoVIew está almacenando en búfer
  • Reproducción de un video descargado Error: 1, -2147483648
  • Calidad de vídeo del flujo de http en VideoView (Adaptive streaming)
  • Vídeo Frame by Frame buscando
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.