У меня есть одно действие с двумя фрагментами (не ViewPager), и я хочу использовать ExoPlayer2 в одном из фрагментов для воспроизведения контента. Первоначальный фрагмент показывает список содержимого, а при щелчке отображается второй фрагмент для воспроизведения выбранного содержимого. Однако, когда я возвращаюсь к исходному фрагменту, я все еще слышу воспроизведение содержимого; как будто второй фрагмент все еще открыт. Я (пытаюсь) выпустить плеер следующим образом:
@Override
public void onStop() {
super.onStop();
releasePlayer();
}
public void releasePlayer() {
if (player != null) {
player.setPlayWhenReady(true);
player.stop();
player.release();
player = null;
trackSelector = null;
simpleExoPlayerView.setPlayer(null);
simpleExoPlayerView = null;
System.out.println("releasePlayer");
}
}
Я прочитал это, но он не дал большого решения. Кроме того, прочитайте несколько сообщений, в которых ExoPlayer используется во фрагментах ViewPager, но не совсем уверены, как эти примеры выпустили плеер. Следуя методу releasePlayer () из демонстрационного приложения, мы нашли здесь, но безуспешно. Вызывается releasePlayer () из onPause (), onDetach (), onDestroyView (), но это не имело значения.
Вот некоторые настройки ведения журнала после того, как слушатель добавлен в проигрыватель, но я не вижу ничего, чтобы объяснить, почему он не выпускается ...
07-05 19:01:07.216 2529-2643/? V/RenderScript: 0xe0494000 Launching thread(s), CPUs 4
07-05 19:01:11.871 3064-3064/? V/MediaCodecInfo: Listener-onPlayerStateChanged...
07-05 19:01:11.876 3064-3064/? V/MediaCodecInfo: Listener-onPlayerStateChanged...
07-05 19:01:11.904 3064-3064/? V/MediaCodecInfo: Listener-onPlayerStateChanged...
07-05 19:01:11.904 3064-3064/? V/MediaCodecInfo: Listener-onTimelineChanged...
07-05 19:01:11.904 3064-3064/? V/MediaCodecInfo: Listener-onLoadingChanged...
07-05 19:01:11.904 3064-3064/? V/MediaCodecInfo: Listener-onPlayerStateChanged...
07-05 19:01:11.904 3064-3064/? V/MediaCodecInfo: Listener-onTimelineChanged...
07-05 19:01:11.904 3064-3064/? V/MediaCodecInfo: Listener-onLoadingChanged...
07-05 19:01:12.467 3064-3064/? V/MediaCodecInfo: Listener-onTimelineChanged...
07-05 19:01:12.468 3064-3064/? V/MediaCodecInfo: Listener-onTimelineChanged...
07-05 19:01:12.515 3064-3099/? V/SoftFFmpegVideo: got OMX_IndexParamPortDefinition, width: 320, height: 180
07-05 19:01:12.708 3064-3064/? V/MediaCodecInfo: Listener-onPlayerStateChanged...
07-05 19:01:12.708 3064-3064/? V/MediaCodecInfo: Listener-onPlayerStateChanged...
07-05 19:01:13.380 3064-3064/? V/MediaCodecInfo: Listener-onLoadingChanged...
07-05 19:01:13.655 3064-3064/? V/MediaCodecInfo: Listener-onLoadingChanged...
07-05 19:01:18.528 3064-3099/? V/SoftFFmpegVideo: ~SoftFFmpegVideo
Пытался нажать кнопку, но не удалось
fragmentExoBinding.button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
System.out.println("button click");
releasePlayer();
}
});
Он вылетал каждый раз, когда я его выключал (используя обратное нажатие, домой или недавнее), потому что игрока больше нет. Обновлен метод releasePlayer (), добавив if (player! = Null), но по-прежнему можно слышать воспроизведение содержимого даже после нажатия кнопки.
releasePlayer();
и thensuper.onStop();
? - person Martin Marconcini   schedule 05.07.2017if (player != null)
в onStop, но это не имеет значения. - person Martin Marconcini   schedule 06.07.2017