diff --git a/library/ui/src/main/java/com/google/android/exoplayer2/ui/SubtitleView.java b/library/ui/src/main/java/com/google/android/exoplayer2/ui/SubtitleView.java index ee9f3f9e1f..23a1add0fc 100644 --- a/library/ui/src/main/java/com/google/android/exoplayer2/ui/SubtitleView.java +++ b/library/ui/src/main/java/com/google/android/exoplayer2/ui/SubtitleView.java @@ -143,6 +143,9 @@ public final class SubtitleView extends FrameLayout implements TextOutput { private void setView(T view) { removeView(innerSubtitleView); + if (innerSubtitleView instanceof SubtitleWebView) { + ((SubtitleWebView) innerSubtitleView).destroy(); + } innerSubtitleView = view; output = view; addView(view); diff --git a/library/ui/src/main/java/com/google/android/exoplayer2/ui/SubtitleWebView.java b/library/ui/src/main/java/com/google/android/exoplayer2/ui/SubtitleWebView.java index d56249a7af..480d057212 100644 --- a/library/ui/src/main/java/com/google/android/exoplayer2/ui/SubtitleWebView.java +++ b/library/ui/src/main/java/com/google/android/exoplayer2/ui/SubtitleWebView.java @@ -174,6 +174,17 @@ import java.util.List; updateWebView(); } + /** + * Cleans up internal state, including calling {@link WebView#destroy()} on the delegate view. + * + *

This method may only be called after this view has been removed from the view system. No + * other methods may be called on this view after destroy. + */ + public void destroy() { + cues.clear(); + webView.destroy(); + } + private void updateWebView() { StringBuilder html = new StringBuilder(); html.append(