From c637774cc25be7e15e853615940813cf1afb0469 Mon Sep 17 00:00:00 2001 From: Ian Baker Date: Wed, 31 Jul 2024 10:33:57 +0100 Subject: [PATCH] Take Executor instead of ExecutorService This also avoids shutting down the externally-provided ExecutorService, which we shouldn't do (since we don't really own it, and didn't create it). --- .../media3/exoplayer/upstream/Loader.java | 22 ++++++++++++------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/upstream/Loader.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/upstream/Loader.java index a0edb917e2..8fc3ffecb3 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/upstream/Loader.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/upstream/Loader.java @@ -36,6 +36,7 @@ import java.lang.annotation.Documented; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; +import java.util.concurrent.Executor; import java.util.concurrent.ExecutorService; import java.util.concurrent.atomic.AtomicBoolean; @@ -204,7 +205,8 @@ public final class Loader implements LoaderErrorThrower { } } - private final ExecutorService downloadExecutorService; + private final Executor downloadExecutor; + private final Runnable downloadExecutorReleaser; @Nullable private LoadTask currentTask; @Nullable private IOException fatalError; @@ -216,16 +218,20 @@ public final class Loader implements LoaderErrorThrower { * component using the loader. */ public Loader(String threadNameSuffix) { - this(Util.newSingleThreadExecutor(THREAD_NAME_PREFIX + threadNameSuffix)); + ExecutorService executorService = + Util.newSingleThreadExecutor(THREAD_NAME_PREFIX + threadNameSuffix); + this.downloadExecutor = executorService; + this.downloadExecutorReleaser = executorService::shutdown; } /** * Constructs an instance. * - * @param downloadExecutorService An {@link ExecutorService} for supplying the loader's thread. + * @param downloadExecutor An {@link Executor} for supplying the loader's thread. */ - public Loader(ExecutorService downloadExecutorService) { - this.downloadExecutorService = downloadExecutorService; + public Loader(Executor downloadExecutor) { + this.downloadExecutor = downloadExecutor; + this.downloadExecutorReleaser = () -> {}; } /** @@ -307,9 +313,9 @@ public final class Loader implements LoaderErrorThrower { currentTask.cancel(true); } if (callback != null) { - downloadExecutorService.execute(new ReleaseTask(callback)); + downloadExecutor.execute(new ReleaseTask(callback)); } - downloadExecutorService.shutdown(); + downloadExecutorReleaser.run(); } // LoaderErrorThrower implementation. @@ -526,7 +532,7 @@ public final class Loader implements LoaderErrorThrower { private void execute() { currentError = null; - downloadExecutorService.execute(Assertions.checkNotNull(currentTask)); + downloadExecutor.execute(Assertions.checkNotNull(currentTask)); } private void finish() {