# BasePreloadManager

Artifact: [androidx.media3:media3-exoplayer](https://developer.android.com/jetpack/androidx/releases/media3) [View Source](https://cs.android.com/search?q=file:androidx/media3/exoplayer/source/preload/BasePreloadManager.java+class:androidx.media3.exoplayer.source.preload.BasePreloadManager)

*** ** * ** ***


```
@UnstableApi
public abstract class BasePreloadManager<T, PreloadStatusT>
```

<br />

Known direct subclasses [DefaultPreloadManager](https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/DefaultPreloadManager)

|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/DefaultPreloadManager` | A preload manager that preloads with the `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/PreloadMediaSource` to load the media data into the `https://developer.android.com/reference/androidx/media3/exoplayer/source/SampleQueue`. |

*** ** * ** ***

A base implementation of a preload manager, which maintains the lifecycle of `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource`.

Methods should be called on the same thread.

## Summary

| ### Nested types |
|---|
| `protected abstract class https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/BasePreloadManager.BuilderBase<T, PreloadStatusT>` A base class of the builder of the concrete extension of `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/BasePreloadManager`. |
| `protected inner class https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/BasePreloadManager.MediaSourceHolder implements https://developer.android.com/reference/java/lang/Comparable.html<https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/BasePreloadManager.MediaSourceHolder>` A holder for information for preloading a single media source. |

| ### Protected fields |
|---|---|
| `final https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/RankingDataComparator<T>` | `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/BasePreloadManager#rankingDataComparator()` |

| ### Protected constructors |
|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/BasePreloadManager#BasePreloadManager(androidx.media3.exoplayer.source.preload.RankingDataComparator<T>,androidx.media3.exoplayer.source.preload.TargetPreloadStatusControl<T,PreloadStatusT>,androidx.media3.exoplayer.source.MediaSource.Factory)( https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/RankingDataComparator<T> rankingDataComparator, https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/TargetPreloadStatusControl<T, PreloadStatusT> targetPreloadStatusControl, https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.Factory mediaSourceFactory )` |

| ### Public methods |
|---|---|
| `final void` | `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/BasePreloadManager#add(androidx.media3.common.MediaItem,T)(https://developer.android.com/reference/androidx/media3/common/MediaItem mediaItem, T rankingData)` Adds a `https://developer.android.com/reference/androidx/media3/common/MediaItem` with its `rankingData` to the preload manager. |
| `final void` | `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/BasePreloadManager#add(androidx.media3.exoplayer.source.MediaSource,T)(https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource mediaSource, T rankingData)` Adds a `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource` with its `rankingData` to the preload manager. |
| `void` | `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/BasePreloadManager#addListener(androidx.media3.exoplayer.source.preload.PreloadManagerListener)(https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/PreloadManagerListener listener)` Adds a `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/PreloadManagerListener` to listen to the preload events. |
| `final void` | `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/BasePreloadManager#addMediaItems(java.util.List<androidx.media3.common.MediaItem>,java.util.List<T>)(https://developer.android.com/reference/java/util/List.html<https://developer.android.com/reference/androidx/media3/common/MediaItem> mediaItems, https://developer.android.com/reference/java/util/List.html<T> rankingDataList)` Adds a list of `https://developer.android.com/reference/androidx/media3/common/MediaItem` with their `rankingData` to the preload manager. |
| `final void` | `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/BasePreloadManager#addMediaSources(java.util.List<androidx.media3.exoplayer.source.MediaSource>,java.util.List<T>)( https://developer.android.com/reference/java/util/List.html<https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource> mediaSources, https://developer.android.com/reference/java/util/List.html<T> rankingDataList )` Adds a list of `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource` with their `rankingData` to the preload manager. |
| `void` | `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/BasePreloadManager#clearListeners()()` Clears all the `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/PreloadManagerListener`. |
| `final @https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource` | `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/BasePreloadManager#getMediaSource(androidx.media3.common.MediaItem)(https://developer.android.com/reference/androidx/media3/common/MediaItem mediaItem)` Returns the `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource` for the given `https://developer.android.com/reference/androidx/media3/common/MediaItem`. |
| `final int` | `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/BasePreloadManager#getSourceCount()()` Gets the count of the `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource` currently being managed by the preload manager. |
| `final void` | `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/BasePreloadManager#invalidate()()` Invalidates the current preload progress, and triggers a new preload progress based on the new priorities of the managed `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource`. |
| `final void` | `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/BasePreloadManager#release()()` Releases the preload manager. |
| `final boolean` | `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/BasePreloadManager#remove(androidx.media3.common.MediaItem)(https://developer.android.com/reference/androidx/media3/common/MediaItem mediaItem)` Removes a `https://developer.android.com/reference/androidx/media3/common/MediaItem` from the preload manager. |
| `final boolean` | `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/BasePreloadManager#remove(androidx.media3.exoplayer.source.MediaSource)(https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource mediaSource)` Removes a `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource` from the preload manager. |
| `void` | `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/BasePreloadManager#removeListener(androidx.media3.exoplayer.source.preload.PreloadManagerListener)(https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/PreloadManagerListener listener)` Removes a `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/PreloadManagerListener`. |
| `final void` | `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/BasePreloadManager#removeMediaItems(java.util.List<androidx.media3.common.MediaItem>)(https://developer.android.com/reference/java/util/List.html<https://developer.android.com/reference/androidx/media3/common/MediaItem> mediaItems)` Removes a list of `https://developer.android.com/reference/androidx/media3/common/MediaItem` from the preload manager. |
| `final void` | `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/BasePreloadManager#removeMediaSources(java.util.List<androidx.media3.exoplayer.source.MediaSource>)(https://developer.android.com/reference/java/util/List.html<https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource> mediaSources)` Removes a list of `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource` from the preload manager. |
| `final void` | `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/BasePreloadManager#reset()()` Resets the preload manager. |

| ### Protected methods |
|---|---|
| `abstract https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/BasePreloadManager.MediaSourceHolder` | `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/BasePreloadManager#createMediaSourceHolder(androidx.media3.common.MediaItem,androidx.media3.exoplayer.source.MediaSource,T)( https://developer.android.com/reference/androidx/media3/common/MediaItem mediaItem, https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource mediaSource, T rankingData )` Returns the `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/BasePreloadManager.MediaSourceHolder` that the preload manager creates for preloading based on the given `https://developer.android.com/reference/androidx/media3/common/MediaItem` and `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource`. |
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/BasePreloadManager.MediaSourceHolder` | `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/BasePreloadManager#getMediaSourceHolderToClear()()` |
| `final @https://developer.android.com/reference/androidx/annotation/Nullable PreloadStatusT` | `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/BasePreloadManager#getTargetPreloadStatusIfCurrentlyPreloading(androidx.media3.common.MediaItem)(https://developer.android.com/reference/androidx/media3/common/MediaItem mediaItem)` |
| `final @https://developer.android.com/reference/androidx/annotation/Nullable PreloadStatusT` | `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/BasePreloadManager#getTargetPreloadStatusIfCurrentlyPreloading(androidx.media3.exoplayer.source.MediaSource)(https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource mediaSource)` |
| `final void` | `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/BasePreloadManager#onCompleted(androidx.media3.common.MediaItem,com.google.common.base.Predicate<PreloadStatusT>)( https://developer.android.com/reference/androidx/media3/common/MediaItem mediaItem, https://guava.dev/releases/snapshot-android/api/docs/com/google/common/base/Predicate.html<PreloadStatusT> shouldNotifyListenerAndAdvancePredicate )` Called when the given `https://developer.android.com/reference/androidx/media3/common/MediaItem` completes preloading. |
| `final void` | `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/BasePreloadManager#onCompleted(androidx.media3.exoplayer.source.MediaSource,com.google.common.base.Predicate<PreloadStatusT>)( https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource mediaSource, https://guava.dev/releases/snapshot-android/api/docs/com/google/common/base/Predicate.html<PreloadStatusT> shouldNotifyListenerAndAdvancePredicate )` Called when the given `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource` completes preloading. |
| `final void` | `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/BasePreloadManager#onError(androidx.media3.exoplayer.source.preload.PreloadException,androidx.media3.common.MediaItem,com.google.common.base.Predicate<PreloadStatusT>)( https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/PreloadException error, https://developer.android.com/reference/androidx/media3/common/MediaItem mediaItem, https://guava.dev/releases/snapshot-android/api/docs/com/google/common/base/Predicate.html<PreloadStatusT> shouldNotifyListenerAndAdvancePredicate )` Called when an error occurs. |
| `final void` | `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/BasePreloadManager#onError(androidx.media3.exoplayer.source.preload.PreloadException,androidx.media3.exoplayer.source.MediaSource,com.google.common.base.Predicate<PreloadStatusT>)( https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/PreloadException error, https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource mediaSource, https://guava.dev/releases/snapshot-android/api/docs/com/google/common/base/Predicate.html<PreloadStatusT> shouldNotifyListenerAndAdvancePredicate )` Called when an error occurs. |
| `final void` | `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/BasePreloadManager#onMediaSourceUpdated(androidx.media3.common.MediaItem,androidx.media3.exoplayer.source.MediaSource)( https://developer.android.com/reference/androidx/media3/common/MediaItem mediaItem, https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource updatedMediaSource )` Called when the given `https://developer.android.com/reference/androidx/media3/common/MediaItem` has its corresponding `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource` updated. |
| `final void` | `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/BasePreloadManager#onSkipped(androidx.media3.exoplayer.source.MediaSource,com.google.common.base.Predicate<PreloadStatusT>)( https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource mediaSource, https://guava.dev/releases/snapshot-android/api/docs/com/google/common/base/Predicate.html<PreloadStatusT> shouldAdvancePredicate )` Called when the given `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource` has been skipped before completing preloading. |
| `final void` | `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/BasePreloadManager#onSourceCleared()()` Called when there is a `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource` has been cleared. |
| `abstract void` | `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/BasePreloadManager#preloadMediaSourceHolderInternal(androidx.media3.exoplayer.source.preload.BasePreloadManager.MediaSourceHolder,PreloadStatusT)( https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/BasePreloadManager.MediaSourceHolder mediaSourceHolder, PreloadStatusT targetPreloadStatus )` Preloads the given `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/BasePreloadManager.MediaSourceHolder`. |
| `void` | `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/BasePreloadManager#releaseInternal()()` Releases the preload manager, see `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/BasePreloadManager#release()`. |
| `void` | `@https://developer.android.com/reference/androidx/annotation/CallSuper https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/BasePreloadManager#releaseMediaSourceHolderInternal(androidx.media3.exoplayer.source.preload.BasePreloadManager.MediaSourceHolder)( https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/BasePreloadManager.MediaSourceHolder mediaSourceHolder )` Releases the given `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/BasePreloadManager.MediaSourceHolder`. |
| `boolean` | `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/BasePreloadManager#shouldStartPreloadingNextSource()()` Returns whether the next `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource` should start preloading. |

## Protected fields

### rankingDataComparator

```
protected final RankingDataComparator<T> rankingDataComparator
```

## Protected constructors

### BasePreloadManager

```
protected BasePreloadManager(
    RankingDataComparator<T> rankingDataComparator,
    TargetPreloadStatusControl<T, PreloadStatusT> targetPreloadStatusControl,
    MediaSource.Factory mediaSourceFactory
)
```

## Public methods

### add

```
public final void add(MediaItem mediaItem, T rankingData)
```

Adds a `https://developer.android.com/reference/androidx/media3/common/MediaItem` with its `rankingData` to the preload manager.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/common/MediaItem mediaItem` | The `https://developer.android.com/reference/androidx/media3/common/MediaItem` to add. |
| `T rankingData` | The ranking data that is associated with the `mediaItem`. |

### add

```
public final void add(MediaSource mediaSource, T rankingData)
```

Adds a `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource` with its `rankingData` to the preload manager.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource mediaSource` | The `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource` to add. |
| `T rankingData` | The ranking data that is associated with the `mediaSource`. |

### addListener

```
public void addListener(PreloadManagerListener listener)
```

Adds a `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/PreloadManagerListener` to listen to the preload events.

This method can be called from any thread.

### addMediaItems

```
public final void addMediaItems(List<MediaItem> mediaItems, List<T> rankingDataList)
```

Adds a list of `https://developer.android.com/reference/androidx/media3/common/MediaItem` with their `rankingData` to the preload manager.

| Parameters |
|---|---|
| `https://developer.android.com/reference/java/util/List.html<https://developer.android.com/reference/androidx/media3/common/MediaItem> mediaItems` | The `https://developer.android.com/reference/androidx/media3/common/MediaItem` to add. |
| `https://developer.android.com/reference/java/util/List.html<T> rankingDataList` | The ranking data that are associated with each media item. |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/IllegalArgumentException.html` | If the passed `mediaSources` and `rankingDataList` are different in sizes. |

### addMediaSources

```
public final void addMediaSources(
    List<MediaSource> mediaSources,
    List<T> rankingDataList
)
```

Adds a list of `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource` with their `rankingData` to the preload manager.

| Parameters |
|---|---|
| `https://developer.android.com/reference/java/util/List.html<https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource> mediaSources` | The `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource` to add. |
| `https://developer.android.com/reference/java/util/List.html<T> rankingDataList` | The ranking data that are associated with each media source. |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/IllegalArgumentException.html` | If the passed `mediaSources` and `rankingDataList` are different in sizes. |

### clearListeners

```
public void clearListeners()
```

Clears all the `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/PreloadManagerListener`.

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/IllegalStateException.html` | If this method is called from the wrong thread. |

### getMediaSource

```
public final @Nullable MediaSource getMediaSource(MediaItem mediaItem)
```

Returns the `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource` for the given `https://developer.android.com/reference/androidx/media3/common/MediaItem`.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/common/MediaItem mediaItem` | The media item. |

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource` | The source for the given `mediaItem` if it is managed by the preload manager, null otherwise. |

### getSourceCount

```
public final int getSourceCount()
```

Gets the count of the `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource` currently being managed by the preload manager.

| Returns |
|---|---|
| `int` | The count of the `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource`. |

### invalidate

```
public final void invalidate()
```

Invalidates the current preload progress, and triggers a new preload progress based on the new priorities of the managed `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource`.

### release

```
public final void release()
```

Releases the preload manager.

The preload manager must not be used after calling this method.

### remove

```
public final boolean remove(MediaItem mediaItem)
```

Removes a `https://developer.android.com/reference/androidx/media3/common/MediaItem` from the preload manager.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/common/MediaItem mediaItem` | The `https://developer.android.com/reference/androidx/media3/common/MediaItem` to remove. |

| Returns |
|---|---|
| `boolean` | `true` if the preload manager is holding a `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource` of the given `https://developer.android.com/reference/androidx/media3/common/MediaItem` and it has been removed, otherwise `false`. |

### remove

```
public final boolean remove(MediaSource mediaSource)
```

Removes a `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource` from the preload manager.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource mediaSource` | The `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource` to remove. |

| Returns |
|---|---|
| `boolean` | `true` if the preload manager is holding the given `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource` instance and it has been removed, otherwise `false`. |

### removeListener

```
public void removeListener(PreloadManagerListener listener)
```

Removes a `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/PreloadManagerListener`.

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/IllegalStateException.html` | If this method is called from the wrong thread. |

### removeMediaItems

```
public final void removeMediaItems(List<MediaItem> mediaItems)
```

Removes a list of `https://developer.android.com/reference/androidx/media3/common/MediaItem` from the preload manager.

| Parameters |
|---|---|
| `https://developer.android.com/reference/java/util/List.html<https://developer.android.com/reference/androidx/media3/common/MediaItem> mediaItems` | The `https://developer.android.com/reference/androidx/media3/common/MediaItem` to remove. |

### removeMediaSources

```
public final void removeMediaSources(List<MediaSource> mediaSources)
```

Removes a list of `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource` from the preload manager.

| Parameters |
|---|---|
| `https://developer.android.com/reference/java/util/List.html<https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource> mediaSources` | The `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource` to remove. |

### reset

```
public final void reset()
```

Resets the preload manager. All sources that the preload manager is holding will be released.

## Protected methods

### createMediaSourceHolder

```
protected abstract BasePreloadManager.MediaSourceHolder createMediaSourceHolder(
    MediaItem mediaItem,
    MediaSource mediaSource,
    T rankingData
)
```

Returns the `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/BasePreloadManager.MediaSourceHolder` that the preload manager creates for preloading based on the given `https://developer.android.com/reference/androidx/media3/common/MediaItem` and `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource`.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/common/MediaItem mediaItem` | The `https://developer.android.com/reference/androidx/media3/common/MediaItem`. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource mediaSource` | The `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource` based on which the preload manager creates for preloading. |
| `T rankingData` | The ranking data that is associated with the `mediaItem`. |

| Returns |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/BasePreloadManager.MediaSourceHolder` | The `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/BasePreloadManager.MediaSourceHolder` the preload manager creates for preloading. |

### getMediaSourceHolderToClear

```
protected @Nullable BasePreloadManager.MediaSourceHolder getMediaSourceHolderToClear()
```

### getTargetPreloadStatusIfCurrentlyPreloading

```
protected final @Nullable PreloadStatusT getTargetPreloadStatusIfCurrentlyPreloading(MediaItem mediaItem)
```

### getTargetPreloadStatusIfCurrentlyPreloading

```
protected final @Nullable PreloadStatusT getTargetPreloadStatusIfCurrentlyPreloading(MediaSource mediaSource)
```

### onCompleted

```
protected final void onCompleted(
    MediaItem mediaItem,
    Predicate<PreloadStatusT> shouldNotifyListenerAndAdvancePredicate
)
```

Called when the given `https://developer.android.com/reference/androidx/media3/common/MediaItem` completes preloading.

### onCompleted

```
protected final void onCompleted(
    MediaSource mediaSource,
    Predicate<PreloadStatusT> shouldNotifyListenerAndAdvancePredicate
)
```

Called when the given `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource` completes preloading.

### onError

```
protected final void onError(
    PreloadException error,
    MediaItem mediaItem,
    Predicate<PreloadStatusT> shouldNotifyListenerAndAdvancePredicate
)
```

Called when an error occurs.

### onError

```
protected final void onError(
    PreloadException error,
    MediaSource mediaSource,
    Predicate<PreloadStatusT> shouldNotifyListenerAndAdvancePredicate
)
```

Called when an error occurs.

### onMediaSourceUpdated

```
protected final void onMediaSourceUpdated(
    MediaItem mediaItem,
    MediaSource updatedMediaSource
)
```

Called when the given `https://developer.android.com/reference/androidx/media3/common/MediaItem` has its corresponding `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource` updated.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/common/MediaItem mediaItem` | The `https://developer.android.com/reference/androidx/media3/common/MediaItem` that apps have added with. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource updatedMediaSource` | The updated `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource`. |

### onSkipped

```
protected final void onSkipped(
    MediaSource mediaSource,
    Predicate<PreloadStatusT> shouldAdvancePredicate
)
```

Called when the given `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource` has been skipped before completing preloading.

### onSourceCleared

```
protected final void onSourceCleared()
```

Called when there is a `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource` has been cleared.

### preloadMediaSourceHolderInternal

```
protected abstract void preloadMediaSourceHolderInternal(
    BasePreloadManager.MediaSourceHolder mediaSourceHolder,
    PreloadStatusT targetPreloadStatus
)
```

Preloads the given `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/BasePreloadManager.MediaSourceHolder`.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/BasePreloadManager.MediaSourceHolder mediaSourceHolder` | The `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/BasePreloadManager.MediaSourceHolder` to preload. |
| `PreloadStatusT targetPreloadStatus` | The target preload status. |

### releaseInternal

```
protected void releaseInternal()
```

Releases the preload manager, see `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/BasePreloadManager#release()`.

### releaseMediaSourceHolderInternal

```
@CallSuper
protected void releaseMediaSourceHolderInternal(
    BasePreloadManager.MediaSourceHolder mediaSourceHolder
)
```

Releases the given `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/BasePreloadManager.MediaSourceHolder`.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/BasePreloadManager.MediaSourceHolder mediaSourceHolder` | The `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/BasePreloadManager.MediaSourceHolder` to remove. |

### shouldStartPreloadingNextSource

```
protected boolean shouldStartPreloadingNextSource()
```

Returns whether the next `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource` should start preloading.