# 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
abstract class BasePreloadManager<T, PreloadStatusT>
```

<br />

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

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

*** ** * ** ***

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

Methods should be called on the same thread.

## Summary

| ### Nested types |
|---|
| `protected abstract class https://developer.android.com/reference/kotlin/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/kotlin/androidx/media3/exoplayer/source/preload/BasePreloadManager`. |
| `protected inner class https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/BasePreloadManager.MediaSourceHolder : https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-comparable/index.html<https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/BasePreloadManager.MediaSourceHolder!>` A holder for information for preloading a single media source. |

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

| ### Public functions |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/BasePreloadManager#add(androidx.media3.common.MediaItem,T)(mediaItem: https://developer.android.com/reference/kotlin/androidx/media3/common/MediaItem!, rankingData: T!)` Adds a `https://developer.android.com/reference/kotlin/androidx/media3/common/MediaItem` with its `rankingData` to the preload manager. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/BasePreloadManager#add(androidx.media3.exoplayer.source.MediaSource,T)(mediaSource: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource!, rankingData: T!)` Adds a `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource` with its `rankingData` to the preload manager. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/BasePreloadManager#addListener(androidx.media3.exoplayer.source.preload.PreloadManagerListener)(listener: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/PreloadManagerListener!)` Adds a `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/PreloadManagerListener` to listen to the preload events. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/BasePreloadManager#addMediaItems(java.util.List<androidx.media3.common.MediaItem>,java.util.List<T>)( mediaItems: (https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-mutable-list/index.html)https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-list/index.html<https://developer.android.com/reference/kotlin/androidx/media3/common/MediaItem!>!, rankingDataList: (https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-mutable-list/index.html)https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-list/index.html<T!>! )` Adds a list of `https://developer.android.com/reference/kotlin/androidx/media3/common/MediaItem` with their `rankingData` to the preload manager. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/BasePreloadManager#addMediaSources(java.util.List<androidx.media3.exoplayer.source.MediaSource>,java.util.List<T>)( mediaSources: (https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-mutable-list/index.html)https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-list/index.html<https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource!>!, rankingDataList: (https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-mutable-list/index.html)https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-list/index.html<T!>! )` Adds a list of `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource` with their `rankingData` to the preload manager. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/BasePreloadManager#clearListeners()()` Clears all the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/PreloadManagerListener`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource?` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/BasePreloadManager#getMediaSource(androidx.media3.common.MediaItem)(mediaItem: https://developer.android.com/reference/kotlin/androidx/media3/common/MediaItem!)` Returns the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource` for the given `https://developer.android.com/reference/kotlin/androidx/media3/common/MediaItem`. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/BasePreloadManager#getSourceCount()()` Gets the count of the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource` currently being managed by the preload manager. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/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/kotlin/androidx/media3/exoplayer/source/MediaSource`. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/BasePreloadManager#release()()` Releases the preload manager. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/BasePreloadManager#remove(androidx.media3.common.MediaItem)(mediaItem: https://developer.android.com/reference/kotlin/androidx/media3/common/MediaItem!)` Removes a `https://developer.android.com/reference/kotlin/androidx/media3/common/MediaItem` from the preload manager. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/BasePreloadManager#remove(androidx.media3.exoplayer.source.MediaSource)(mediaSource: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource!)` Removes a `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource` from the preload manager. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/BasePreloadManager#removeListener(androidx.media3.exoplayer.source.preload.PreloadManagerListener)(listener: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/PreloadManagerListener!)` Removes a `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/PreloadManagerListener`. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/BasePreloadManager#removeMediaItems(java.util.List<androidx.media3.common.MediaItem>)(mediaItems: (https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-mutable-list/index.html)https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-list/index.html<https://developer.android.com/reference/kotlin/androidx/media3/common/MediaItem!>!)` Removes a list of `https://developer.android.com/reference/kotlin/androidx/media3/common/MediaItem` from the preload manager. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/BasePreloadManager#removeMediaSources(java.util.List<androidx.media3.exoplayer.source.MediaSource>)(mediaSources: (https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-mutable-list/index.html)https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-list/index.html<https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource!>!)` Removes a list of `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource` from the preload manager. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/BasePreloadManager#reset()()` Resets the preload manager. |

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

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

## Protected constructors

### BasePreloadManager

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

## Public functions

### add

```
fun add(mediaItem: MediaItem!, rankingData: T!): Unit
```

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

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

### add

```
fun add(mediaSource: MediaSource!, rankingData: T!): Unit
```

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

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

### addListener

```
fun addListener(listener: PreloadManagerListener!): Unit
```

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

This method can be called from any thread.

### addMediaItems

```
fun addMediaItems(
    mediaItems: (Mutable)List<MediaItem!>!,
    rankingDataList: (Mutable)List<T!>!
): Unit
```

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

| Parameters |
|---|---|
| `mediaItems: (https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-mutable-list/index.html)https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-list/index.html<https://developer.android.com/reference/kotlin/androidx/media3/common/MediaItem!>!` | The `https://developer.android.com/reference/kotlin/androidx/media3/common/MediaItem` to add. |
| `rankingDataList: (https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-mutable-list/index.html)https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-list/index.html<T!>!` | 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

```
fun addMediaSources(
    mediaSources: (Mutable)List<MediaSource!>!,
    rankingDataList: (Mutable)List<T!>!
): Unit
```

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

| Parameters |
|---|---|
| `mediaSources: (https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-mutable-list/index.html)https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-list/index.html<https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource!>!` | The `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource` to add. |
| `rankingDataList: (https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-mutable-list/index.html)https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-list/index.html<T!>!` | 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

```
fun clearListeners(): Unit
```

Clears all the `https://developer.android.com/reference/kotlin/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

```
fun getMediaSource(mediaItem: MediaItem!): MediaSource?
```

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

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

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

### getSourceCount

```
fun getSourceCount(): Int
```

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

| Returns |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | The count of the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource`. |

### invalidate

```
fun invalidate(): Unit
```

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

### release

```
fun release(): Unit
```

Releases the preload manager.

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

### remove

```
fun remove(mediaItem: MediaItem!): Boolean
```

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

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

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

### remove

```
fun remove(mediaSource: MediaSource!): Boolean
```

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

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

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

### removeListener

```
fun removeListener(listener: PreloadManagerListener!): Unit
```

Removes a `https://developer.android.com/reference/kotlin/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

```
fun removeMediaItems(mediaItems: (Mutable)List<MediaItem!>!): Unit
```

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

| Parameters |
|---|---|
| `mediaItems: (https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-mutable-list/index.html)https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-list/index.html<https://developer.android.com/reference/kotlin/androidx/media3/common/MediaItem!>!` | The `https://developer.android.com/reference/kotlin/androidx/media3/common/MediaItem` to remove. |

### removeMediaSources

```
fun removeMediaSources(mediaSources: (Mutable)List<MediaSource!>!): Unit
```

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

| Parameters |
|---|---|
| `mediaSources: (https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-mutable-list/index.html)https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-list/index.html<https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource!>!` | The `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource` to remove. |

### reset

```
fun reset(): Unit
```

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

## Protected functions

### createMediaSourceHolder

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

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

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

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

### getMediaSourceHolderToClear

```
protected fun getMediaSourceHolderToClear(): BasePreloadManager.MediaSourceHolder?
```

### getTargetPreloadStatusIfCurrentlyPreloading

```
protected fun getTargetPreloadStatusIfCurrentlyPreloading(mediaItem: MediaItem!): PreloadStatusT?
```

### getTargetPreloadStatusIfCurrentlyPreloading

```
protected fun getTargetPreloadStatusIfCurrentlyPreloading(mediaSource: MediaSource!): PreloadStatusT?
```

### onCompleted

```
protected fun onCompleted(
    mediaItem: MediaItem!,
    shouldNotifyListenerAndAdvancePredicate: Predicate<PreloadStatusT!>!
): Unit
```

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

### onCompleted

```
protected fun onCompleted(
    mediaSource: MediaSource!,
    shouldNotifyListenerAndAdvancePredicate: Predicate<PreloadStatusT!>!
): Unit
```

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

### onError

```
protected fun onError(
    error: PreloadException!,
    mediaItem: MediaItem!,
    shouldNotifyListenerAndAdvancePredicate: Predicate<PreloadStatusT!>!
): Unit
```

Called when an error occurs.

### onError

```
protected fun onError(
    error: PreloadException!,
    mediaSource: MediaSource!,
    shouldNotifyListenerAndAdvancePredicate: Predicate<PreloadStatusT!>!
): Unit
```

Called when an error occurs.

### onMediaSourceUpdated

```
protected fun onMediaSourceUpdated(
    mediaItem: MediaItem!,
    updatedMediaSource: MediaSource!
): Unit
```

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

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

### onSkipped

```
protected fun onSkipped(
    mediaSource: MediaSource!,
    shouldAdvancePredicate: Predicate<PreloadStatusT!>!
): Unit
```

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

### onSourceCleared

```
protected fun onSourceCleared(): Unit
```

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

### preloadMediaSourceHolderInternal

```
protected abstract fun preloadMediaSourceHolderInternal(
    mediaSourceHolder: BasePreloadManager.MediaSourceHolder!,
    targetPreloadStatus: PreloadStatusT!
): Unit
```

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

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

### releaseInternal

```
protected fun releaseInternal(): Unit
```

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

### releaseMediaSourceHolderInternal

```
@CallSuper
protected fun releaseMediaSourceHolderInternal(
    mediaSourceHolder: BasePreloadManager.MediaSourceHolder!
): Unit
```

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

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

### shouldStartPreloadingNextSource

```
protected fun shouldStartPreloadingNextSource(): Boolean
```

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

## Protected properties

### rankingDataComparator

```
protected val rankingDataComparator: RankingDataComparator<T!>!
```