# DefaultPreloadManager

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/DefaultPreloadManager.java+class:androidx.media3.exoplayer.source.preload.DefaultPreloadManager)

*** ** * ** ***


```
@UnstableApi
public final class DefaultPreloadManager extends BasePreloadManager<Integer, DefaultPreloadManager.PreloadStatus>
```

<br />

|---|---|---|
| [java.lang.Object](https://developer.android.com/reference/java/lang/Object.html) |||
| ↳ | [androidx.media3.exoplayer.source.preload.BasePreloadManager](https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/BasePreloadManager)\<[Integer](https://developer.android.com/reference/java/lang/Integer.html), [DefaultPreloadManager.PreloadStatus](https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.PreloadStatus)\> ||
|   | ↳ | [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`.

## Summary

| ### Nested types |
|---|
| `public final class https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder extends https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/BasePreloadManager.BuilderBase<https://developer.android.com/reference/java/lang/Integer.html, https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.PreloadStatus>` A builder for `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/DefaultPreloadManager` instances. |
| `public final class https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.PreloadStatus` Defines the preload status for the `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/DefaultPreloadManager`. |
| `@https://developer.android.com/reference/java/lang/annotation/Documented.html @https://developer.android.com/reference/java/lang/annotation/Retention.html(value = https://developer.android.com/reference/java/lang/annotation/RetentionPolicy.html#SOURCE) @https://developer.android.com/reference/java/lang/annotation/Target.html(value = https://developer.android.com/reference/java/lang/annotation/ElementType.html#TYPE_USE) @https://developer.android.com/reference/androidx/annotation/IntDef(value = ) public annotation https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.PreloadStatus.Stage` Stages for the preload status. |
| `public class https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.SimpleRankingDataComparator implements https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/RankingDataComparator<https://developer.android.com/reference/java/lang/Integer.html>` A `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/RankingDataComparator` which compares the ranks of the media items based on their distances to the `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.SimpleRankingDataComparator#setCurrentPlayingIndex(int)`. |

| ### Public methods |
|---|---|
| `void` | `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/DefaultPreloadManager#setCurrentPlayingIndex(int)(int currentPlayingIndex)` Sets the index of the current playing media. |

| ### Protected methods |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/BasePreloadManager.MediaSourceHolder` | `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/DefaultPreloadManager#createMediaSourceHolder(androidx.media3.common.MediaItem,androidx.media3.exoplayer.source.MediaSource,java.lang.Integer)( https://developer.android.com/reference/androidx/media3/common/MediaItem mediaItem, @https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource mediaSource, https://developer.android.com/reference/java/lang/Integer.html 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`. |
| `void` | `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/DefaultPreloadManager#preloadMediaSourceHolderInternal(androidx.media3.exoplayer.source.preload.BasePreloadManager.MediaSourceHolder,androidx.media3.exoplayer.source.preload.DefaultPreloadManager.PreloadStatus)( https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/BasePreloadManager.MediaSourceHolder mediaSourceHolder, https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.PreloadStatus 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/DefaultPreloadManager#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/media3/exoplayer/source/preload/DefaultPreloadManager#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`. |

### Inherited fields

From [androidx.media3.exoplayer.source.preload.BasePreloadManager](https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/BasePreloadManager) `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()`

### Inherited methods

From [androidx.media3.exoplayer.source.preload.BasePreloadManager](https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/BasePreloadManager) `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`.
`@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 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 @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#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#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.
`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.
`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.

## Public methods

### setCurrentPlayingIndex

```
public void setCurrentPlayingIndex(int currentPlayingIndex)
```

Sets the index of the current playing media.

| Parameters |
|---|---|
| `int currentPlayingIndex` | The index of current playing media. |

## Protected methods

### createMediaSourceHolder

```
protected BasePreloadManager.MediaSourceHolder createMediaSourceHolder(
    MediaItem mediaItem,
    @Nullable MediaSource mediaSource,
    Integer 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/annotation/Nullable 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. |
| `https://developer.android.com/reference/java/lang/Integer.html 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. |

### preloadMediaSourceHolderInternal

```
protected void preloadMediaSourceHolderInternal(
    BasePreloadManager.MediaSourceHolder mediaSourceHolder,
    DefaultPreloadManager.PreloadStatus 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. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.PreloadStatus 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

```
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. |