Проблемы с утечкой памяти ExoPlayer — канал утечки

#android #memory-leaks #exoplayer #exoplayer2.x #leakcanary

#Android #утечки памяти #exoplayer #exoplayer2.x #канал утечки

Вопрос:

Я обнаружил утечку памяти в своей заставке

воспроизводится видео из папки ресурсов на заставке с помощью ExoPlayer.

Канал утечки, где появляются эти введите описание изображения здесь
введите описание изображения здесь

инициализируйте проигрыватель:

 player = ExoPlayerFactory.newSimpleInstance(
                this,
                new DefaultTrackSelector(),
                new DefaultLoadControl()
        );
        videoView.setPlayer(player);
        DataSpec dataSpec = new DataSpec(Uri.parse("assets:///video.mp4"));
        final AssetDataSource assetDataSource = new AssetDataSource(this);
        try {
            assetDataSource.open(dataSpec);
        } catch (AssetDataSource.AssetDataSourceException e) {
            Timber.e(e.getLocalizedMessage());
        }
        DataSource.Factory dataSourceFactory = new DataSource.Factory() {
            @Override
            public DataSource createDataSource() {
                return assetDataSource;
            }
        };
        MediaSource mediaSource = new ExtractorMediaSource(
                assetDataSource.getUri(),
                dataSourceFactory,
                new DefaultExtractorsFactory(),
                null,
                null
        );
        player.setRepeatMode(Player.REPEAT_MODE_ALL);
        player.prepare(mediaSource, true, false);
  

xml:

   <com.google.android.exoplayer2.ui.PlayerView
            android:id="@ id/videoView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fitsSystemWindows="true"
            app:resize_mode="zoom"
            app:use_controller="false" />
  

вы видите какую-либо проблему? где утечка? где утечка? 🙂

Комментарии:

1. Анонимные классы ( new DataSource.Factory ) содержат неявную ссылку на внешний класс (здесь activity). У вас не должно возникнуть этой проблемы — вам нужно правильно распорядиться всеми ресурсами, используемыми плеером, когда действие будет уничтожено.

2. @EugenPechanec хорошо, спасибо.