#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 хорошо, спасибо.