Reset stream manager in AdsLoader.release()

This prevents a stack trace that is shown in the logs when the stream manager is
released after the activity was stopped. In this case the call to
`streamManager.destroy()` coming from `releaseSourceInternal()` of the media
source is too late and produces an error saying `Application attempted to call on
a destroyed WebView`. The error has no effect but it's nice to not have this
stack trace in the logs.

PiperOrigin-RevId: 428574231
This commit is contained in:
bachinger 2022-02-14 20:05:19 +00:00 committed by Ian Baker
parent 741ab34a63
commit 1a31faaeee

View File

@ -295,23 +295,31 @@ public final class ImaServerSideAdInsertionMediaSource extends CompositeMediaSou
for (MediaSourceResourceHolder resourceHolder : mediaSourceResources.values()) {
resourceHolder.streamPlayer.release();
resourceHolder.adsLoader.release();
resourceHolder.imaServerSideAdInsertionMediaSource.setStreamManager(
/* streamManager= */ null);
}
mediaSourceResources.clear();
player = null;
}
/* package */ void addMediaSourceResources(
ImaServerSideAdInsertionMediaSource mediaSource,
StreamPlayer streamPlayer,
com.google.ads.interactivemedia.v3.api.AdsLoader adsLoader) {
mediaSourceResources.put(mediaSource, new MediaSourceResourceHolder(streamPlayer, adsLoader));
mediaSourceResources.put(
mediaSource, new MediaSourceResourceHolder(mediaSource, streamPlayer, adsLoader));
}
private static final class MediaSourceResourceHolder {
public final ImaServerSideAdInsertionMediaSource imaServerSideAdInsertionMediaSource;
public final StreamPlayer streamPlayer;
public final com.google.ads.interactivemedia.v3.api.AdsLoader adsLoader;
private MediaSourceResourceHolder(
StreamPlayer streamPlayer, com.google.ads.interactivemedia.v3.api.AdsLoader adsLoader) {
ImaServerSideAdInsertionMediaSource imaServerSideAdInsertionMediaSource,
StreamPlayer streamPlayer,
com.google.ads.interactivemedia.v3.api.AdsLoader adsLoader) {
this.imaServerSideAdInsertionMediaSource = imaServerSideAdInsertionMediaSource;
this.streamPlayer = streamPlayer;
this.adsLoader = adsLoader;
}