Intereting Posts
SeekBar программно Открыть профиль пользователя Instagram Импортировать com.google.android.gms.location.LocationServices, не удается обновить службы определения местоположения Как отключить предупреждение eclipse в производном файле IMarketBillingService.java? Значок подсчета уведомлений панели действий (значок), например, Google Невозможно создать экземпляр фрагмента, убедитесь, что имя класса существует, является общедоступным и имеет пустой конструктор, открытый Недопустимый вопрос GestureDetector Ограничение размера на прилагаемом Parcelable? Как обновить ListView в ListFragment из FragmentActivity? Как открыть камеру непосредственно в режиме панорамы / фотосферы? Android / Java: сохранение байтового массива в файл (.jpeg) Импортировать проект Android Studio с другого ПК с различными версиями Gradle? Как определить текущий IME в Android? Невозможно обновить плагин ADT в Eclipse до версии 23.0.0 или выше Как тестирует соло / небольшая группа разработчиков на нескольких устройствах?

VideoView не запускается, когда невидимый

У меня есть AsyncTask, где я скрываю вид видео, запускаю воспроизведение видео и показываю видеоролик, когда воспроизводится видео.

Но видео просто не запустится, когда видеоизображение будет установлено на невидимое, задача async будет висит в onBackground. Если я прокомментирую эту строку, начнется воспроизведение видео. Почему для просмотра видео требуется видимая поверхность?

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(); 

Немного фона, почему я это делаю: стараюсь избегать известной проблемы черной вспышки, которую вы обычно делаете при запуске видео:

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

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

Solutions Collecting From Web of "VideoView не запускается, когда невидимый"

VideoView – это действительно специализированный SurfaceView . SurfaceView работает, создавая другое окно за нормальным окном (содержащее все представления), а затем обладая прозрачностью, чтобы за ним можно было увидеть новое окно (со своей поверхностью рисования).

Если SurfaceView больше не виден, его поверхность будет уничтожена, то есть SurfaceHolder.Callback.surfaceDestroyed . VideoView не будет пытаться воспроизводить его видео, если не существует допустимой поверхности, поэтому ваша AsyncTask сможет никогда не покидать doInBackground .

Поверхность будет создана для вас, пока будет открыто окно SurfaceView; Вы должны реализовать surfaceCreated (SurfaceHolder) и surfaceDestroyed (SurfaceHolder), чтобы обнаружить, когда Поверхность создается и уничтожается при показе и скрытии окна.