Я работаю над приложением для обработки мультимедийного видео для Android и столкнулся с небольшой проблемой. Я использую класс FragmentPagerAdapter
с несколькими различными фрагментами внутри для различных этапов обработки видео.
Мой первый Fragment
содержит SurfaceView
и MediaPlayer
, которые питают его, а также различные элементы управления воспроизведением. Моя проблема возникает, когда я перехожу от фрагмента 1 (с SurfaceView) к фрагменту 2 (пустой в данный момент). Если я еще не позвонил start()
, ничего необычного не происходит, и я могу нормально листать фрагменты. Однако, как только я вызываю start()
, весь экран начинает мигать, когда я перехожу к следующему Fragment
, даже если я перевел MediaPlayer
в состояние ожидания и он не передает кадры на SurfaceView
. Единственное, что может остановить это, — это уничтожить поверхность вместе с содержащимся представлением, проведя пальцем к третьему Fragment
, чтобы FragmentPagerAdapter
уничтожило Fragment
, или выйти из приложения с помощью кнопки «Домой» или «Назад», чтобы представление было уничтожено.
Я не могу понять, почему это происходит, кроме того, что, возможно, поток рендеринга SurfaceView
каким-то образом мешает основному потоку пользовательского интерфейса. В LogCat также не появляется ничего необычного, поэтому я немного застрял. Я использую Galaxy Nexus с Android 4.1 в качестве тестового оборудования.
Любая помощь будет оценена по достоинству!
JT
ОБНОВЛЕНИЕ: мне удалось найти временное решение, переопределив метод setPrimaryItem()
в FragmentPagerAdapter
для вызова метода, который удаляет SurfaceView
из иерархии (используя removeView()
в контейнере LinearLayout
), когда видеоплеер Fragment
перестает отображаться, а затем восстанавливает SurfaceView
, когда он снова становится активным. К сожалению, когда это происходит, все еще немного мигает, поэтому, если у кого-то есть дополнительные мысли, я был бы признателен!