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()) { for (MediaSourceResourceHolder resourceHolder : mediaSourceResources.values()) {
resourceHolder.streamPlayer.release(); resourceHolder.streamPlayer.release();
resourceHolder.adsLoader.release(); resourceHolder.adsLoader.release();
resourceHolder.imaServerSideAdInsertionMediaSource.setStreamManager(
/* streamManager= */ null);
} }
mediaSourceResources.clear(); mediaSourceResources.clear();
player = null;
} }
/* package */ void addMediaSourceResources( /* package */ void addMediaSourceResources(
ImaServerSideAdInsertionMediaSource mediaSource, ImaServerSideAdInsertionMediaSource mediaSource,
StreamPlayer streamPlayer, StreamPlayer streamPlayer,
com.google.ads.interactivemedia.v3.api.AdsLoader adsLoader) { 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 { private static final class MediaSourceResourceHolder {
public final ImaServerSideAdInsertionMediaSource imaServerSideAdInsertionMediaSource;
public final StreamPlayer streamPlayer; public final StreamPlayer streamPlayer;
public final com.google.ads.interactivemedia.v3.api.AdsLoader adsLoader; public final com.google.ads.interactivemedia.v3.api.AdsLoader adsLoader;
private MediaSourceResourceHolder( 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.streamPlayer = streamPlayer;
this.adsLoader = adsLoader; this.adsLoader = adsLoader;
} }