22
22
import static java .lang .annotation .ElementType .TYPE_USE ;
23
23
24
24
import android .content .Context ;
25
+ import android .os .Handler ;
25
26
import android .os .Looper ;
26
27
import android .os .Process ;
27
28
import androidx .annotation .IntDef ;
@@ -327,6 +328,7 @@ public long getValue() {
327
328
private final TrackSelector trackSelector ;
328
329
private final PlaybackLooperProvider preloadLooperProvider ;
329
330
private final PreloadMediaSource .Factory preloadMediaSourceFactory ;
331
+ private final Handler preloadHandler ;
330
332
private final boolean deprecatedConstructorCalled ;
331
333
332
334
private DefaultPreloadManager (Builder builder ) {
@@ -341,6 +343,7 @@ private DefaultPreloadManager(Builder builder) {
341
343
trackSelector = builder .trackSelectorFactory .createTrackSelector (builder .context );
342
344
BandwidthMeter bandwidthMeter = builder .bandwidthMeterSupplier .get ();
343
345
trackSelector .init (() -> {}, bandwidthMeter );
346
+ Looper preloadLooper = preloadLooperProvider .obtainLooper ();
344
347
preloadMediaSourceFactory =
345
348
new PreloadMediaSource .Factory (
346
349
builder .mediaSourceFactorySupplier .get (),
@@ -349,7 +352,8 @@ private DefaultPreloadManager(Builder builder) {
349
352
bandwidthMeter ,
350
353
rendererCapabilitiesList .getRendererCapabilities (),
351
354
builder .loadControlSupplier .get ().getAllocator (),
352
- preloadLooperProvider .obtainLooper ());
355
+ preloadLooper );
356
+ preloadHandler = Util .createHandler (preloadLooper , /* callback= */ null );
353
357
deprecatedConstructorCalled = false ;
354
358
}
355
359
@@ -370,6 +374,7 @@ public DefaultPreloadManager(
370
374
rendererCapabilitiesListFactory .createRendererCapabilitiesList ();
371
375
this .preloadLooperProvider = new PlaybackLooperProvider (preloadLooper );
372
376
this .trackSelector = trackSelector ;
377
+ Looper obtainedPreloadLooper = preloadLooperProvider .obtainLooper ();
373
378
preloadMediaSourceFactory =
374
379
new PreloadMediaSource .Factory (
375
380
mediaSourceFactory ,
@@ -378,7 +383,8 @@ public DefaultPreloadManager(
378
383
bandwidthMeter ,
379
384
rendererCapabilitiesList .getRendererCapabilities (),
380
385
allocator ,
381
- preloadLooperProvider .obtainLooper ());
386
+ obtainedPreloadLooper );
387
+ preloadHandler = Util .createHandler (obtainedPreloadLooper , /* callback= */ null );
382
388
deprecatedConstructorCalled = true ;
383
389
}
384
390
@@ -418,13 +424,16 @@ protected void releaseSourceInternal(MediaSource mediaSource) {
418
424
419
425
@ Override
420
426
protected void releaseInternal () {
421
- rendererCapabilitiesList .release ();
422
- preloadLooperProvider .releaseLooper ();
423
- if (!deprecatedConstructorCalled ) {
424
- // TODO: Remove the property deprecatedConstructorCalled and release the TrackSelector anyway
425
- // after the deprecated constructor is removed.
426
- trackSelector .release ();
427
- }
427
+ preloadHandler .post (
428
+ () -> {
429
+ rendererCapabilitiesList .release ();
430
+ if (!deprecatedConstructorCalled ) {
431
+ // TODO: Remove the property deprecatedConstructorCalled and release the TrackSelector
432
+ // anyway after the deprecated constructor is removed.
433
+ trackSelector .release ();
434
+ }
435
+ preloadLooperProvider .releaseLooper ();
436
+ });
428
437
}
429
438
430
439
private static final class RankingDataComparator implements Comparator <Integer > {
0 commit comments