# DefaultPreloadManager.Builder

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.Builder)

*** ** * ** ***


```
class DefaultPreloadManager.Builder : BasePreloadManager.BuilderBase<Int!, DefaultPreloadManager.PreloadStatus!>
```

<br />

|---|---|---|
| [kotlin.Any](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html) |||
| ↳ | [androidx.media3.exoplayer.source.preload.BasePreloadManager.BuilderBase](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/BasePreloadManager.BuilderBase)\<[Int](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)!, [DefaultPreloadManager.PreloadStatus](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.PreloadStatus)!\> ||
|   | ↳ | [androidx.media3.exoplayer.source.preload.DefaultPreloadManager.Builder](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder) |

*** ** * ** ***

A builder for `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager` instances.

## Summary

| ### Public constructors |
|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder#Builder(android.content.Context,androidx.media3.exoplayer.source.preload.TargetPreloadStatusControl<java.lang.Integer,androidx.media3.exoplayer.source.preload.DefaultPreloadManager.PreloadStatus>)( context: https://developer.android.com/reference/android/content/Context.html!, targetPreloadStatusControl: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/TargetPreloadStatusControl<https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html!, https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.PreloadStatus!>! )` Creates a builder. |
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder#Builder(android.content.Context,androidx.media3.exoplayer.source.preload.DefaultPreloadManager.SimpleRankingDataComparator,androidx.media3.exoplayer.source.preload.TargetPreloadStatusControl<java.lang.Integer,androidx.media3.exoplayer.source.preload.DefaultPreloadManager.PreloadStatus>)( context: https://developer.android.com/reference/android/content/Context.html!, rankingDataComparator: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.SimpleRankingDataComparator!, targetPreloadStatusControl: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/TargetPreloadStatusControl<https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html!, https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.PreloadStatus!>! )` Creates a builder. |

| ### Public functions |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager!` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder#build()()` Builds a `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager` instance. |
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlayer!` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder#buildExoPlayer()()` Builds an `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlayer`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlayer!` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder#buildExoPlayer(androidx.media3.exoplayer.ExoPlayer.Builder)(exoPlayerBuilder: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlayer.Builder!)` Builds an `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlayer` with an `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlayer.Builder` passed in. |
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder!` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder#setBandwidthMeter(androidx.media3.exoplayer.upstream.BandwidthMeter)(bandwidthMeter: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/upstream/BandwidthMeter!)` Sets the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/upstream/BandwidthMeter` that will be used by the built `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager` and `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlayer`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder!` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder#setCache(androidx.media3.datasource.cache.Cache)(cache: https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/Cache?)` Sets the `https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/Cache` that will be used by the built `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager` and `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlayer`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder!` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder#setCachingExecutor(java.util.concurrent.Executor)(executor: https://developer.android.com/reference/java/util/concurrent/Executor.html!)` Sets an `https://developer.android.com/reference/java/util/concurrent/Executor.html` used to cache data. |
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder!` | `@https://developer.android.com/reference/kotlin/androidx/annotation/VisibleForTesting @https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder#setClock(androidx.media3.common.util.Clock)(clock: https://developer.android.com/reference/kotlin/androidx/media3/common/util/Clock!)` Sets the `https://developer.android.com/reference/kotlin/androidx/media3/common/util/Clock` that will be used the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder!` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder#setDataSourceFactory(androidx.media3.datasource.DataSource.Factory)(dataSourceFactory: https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSource.Factory!)` Sets the `https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSource.Factory` that will be used by the built `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager` and `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlayer`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder!` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder#setLoadControl(androidx.media3.exoplayer.LoadControl)(loadControl: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/LoadControl!)` Sets the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/LoadControl` that will be used by the built `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager` and `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlayer`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder!` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html [setMediaSourceFactory](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder#setMediaSourceFactory(androidx.media3.exoplayer.source.MediaSource.Factory))(mediaSourceFactory: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource.Factory!)` **This function is deprecated.** Use `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder#setMediaSourceFactorySupplier(androidx.media3.exoplayer.source.preload.MediaSourceFactorySupplier)` instead. <br /> |
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder!` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder#setMediaSourceFactorySupplier(androidx.media3.exoplayer.source.preload.MediaSourceFactorySupplier)( mediaSourceFactorySupplier: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/MediaSourceFactorySupplier! )` Sets the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/MediaSourceFactorySupplier` which supplies the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource.Factory` that will be used by the built `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager` and `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlayer`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder!` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder#setPreloadLooper(android.os.Looper)(preloadLooper: https://developer.android.com/reference/android/os/Looper.html!)` Sets the `https://developer.android.com/reference/android/os/Looper.html` that will be used for preload and playback. |
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder!` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder#setRenderersFactory(androidx.media3.exoplayer.RenderersFactory)(renderersFactory: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RenderersFactory!)` Sets the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RenderersFactory` that will be used by the built `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager` and `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlayer`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder!` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder#setTrackSelectorFactory(androidx.media3.exoplayer.trackselection.TrackSelector.Factory)(trackSelectorFactory: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/trackselection/TrackSelector.Factory!)` Sets the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/trackselection/TrackSelector.Factory` that will be used by the built `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager` and `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlayer`. |

### Inherited properties

From [androidx.media3.exoplayer.source.preload.BasePreloadManager.BuilderBase](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/BasePreloadManager.BuilderBase) `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/MediaSourceFactorySupplier!` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/BasePreloadManager.BuilderBase#mediaSourceFactorySupplier()` `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.BuilderBase#rankingDataComparator()` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/TargetPreloadStatusControl<T!, PreloadStatusT!>!` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/BasePreloadManager.BuilderBase#targetPreloadStatusControl()`

## Public constructors

### Builder

```
Builder(
    context: Context!,
    targetPreloadStatusControl: TargetPreloadStatusControl<Int!, DefaultPreloadManager.PreloadStatus!>!
)
```

Creates a builder.

| Parameters |
|---|---|
| `context: https://developer.android.com/reference/android/content/Context.html!` | A `https://developer.android.com/reference/android/content/Context.html`. |
| `targetPreloadStatusControl: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/TargetPreloadStatusControl<https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html!, https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.PreloadStatus!>!` | A `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/TargetPreloadStatusControl`. |

### Builder

```
Builder(
    context: Context!,
    rankingDataComparator: DefaultPreloadManager.SimpleRankingDataComparator!,
    targetPreloadStatusControl: TargetPreloadStatusControl<Int!, DefaultPreloadManager.PreloadStatus!>!
)
```

Creates a builder.

| Parameters |
|---|---|
| `context: https://developer.android.com/reference/android/content/Context.html!` | A `https://developer.android.com/reference/android/content/Context.html`. |
| `rankingDataComparator: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.SimpleRankingDataComparator!` | A `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.SimpleRankingDataComparator`. |
| `targetPreloadStatusControl: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/TargetPreloadStatusControl<https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html!, https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.PreloadStatus!>!` | A `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/TargetPreloadStatusControl`. |

## Public functions

### build

```
fun build(): DefaultPreloadManager!
```

Builds a `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager` instance.

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/IllegalStateException.html` | If this method has already been called. |

### buildExoPlayer

```
fun buildExoPlayer(): ExoPlayer!
```

Builds an `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlayer`.

See `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder#buildExoPlayer(androidx.media3.exoplayer.ExoPlayer.Builder)` for the list of values populated on and resulting from this builder that the built `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlayer` uses.

For the other configurations than above, the built `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlayer` uses the default values, see `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlayer.Builder#Builder(android.content.Context)` for the list of default values.

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlayer!` | An `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlayer` instance. |

### buildExoPlayer

```
fun buildExoPlayer(exoPlayerBuilder: ExoPlayer.Builder!): ExoPlayer!
```

Builds an `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlayer` with an `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlayer.Builder` passed in.

The built `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlayer` uses the following values populated on and resulting from this builder:

- `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder#setMediaSourceFactorySupplier(androidx.media3.exoplayer.source.preload.MediaSourceFactorySupplier)` MediaSource.Factory}
- `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder#setRenderersFactory(androidx.media3.exoplayer.RenderersFactory)`
- `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder#setTrackSelectorFactory(androidx.media3.exoplayer.trackselection.TrackSelector.Factory)`
- `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder#setLoadControl(androidx.media3.exoplayer.LoadControl)`
- `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder#setBandwidthMeter(androidx.media3.exoplayer.upstream.BandwidthMeter)`
- `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder#setPreloadLooper(android.os.Looper)` preload looper}

For the other configurations than above, the built `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlayer` uses the values from the passed `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlayer.Builder`.

| Parameters |
|---|---|
| `exoPlayerBuilder: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlayer.Builder!` | An `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlayer.Builder` that is used to build the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlayer`. |

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlayer!` | An `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlayer` instance. |

### setBandwidthMeter

```
@CanIgnoreReturnValue
fun setBandwidthMeter(bandwidthMeter: BandwidthMeter!): DefaultPreloadManager.Builder!
```

Sets the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/upstream/BandwidthMeter` that will be used by the built `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager` and `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlayer`.

The default is a `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/upstream/DefaultBandwidthMeter`.

| Parameters |
|---|---|
| `bandwidthMeter: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/upstream/BandwidthMeter!` | A `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/upstream/BandwidthMeter`. |

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder!` | This builder. |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/IllegalStateException.html` | If `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder#build()`, `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder#buildExoPlayer()` or `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder#buildExoPlayer(androidx.media3.exoplayer.ExoPlayer.Builder)` has already been called. |
| `https://developer.android.com/reference/java/lang/IllegalArgumentException.html` | If `bandwidthMeter` is `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/upstream/BandwidthMeter#NO_OP()`. |

### setCache

```
@CanIgnoreReturnValue
fun setCache(cache: Cache?): DefaultPreloadManager.Builder!
```

Sets the `https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/Cache` that will be used by the built `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager` and `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlayer`.

The `https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/Cache` will be used for caching the media items, and propagated to the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource.Factory` used by `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager` and `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlayer` for media source creation. Once set, the `https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/Cache` will be passed into the existing `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/MediaSourceFactorySupplier#setCache(androidx.media3.datasource.cache.Cache)` on this builder, and the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/MediaSourceFactorySupplier` later set to this builder.

The default is `null`. If an app will return `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.PreloadStatus#specifiedRangeCached(long,long)` or `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.PreloadStatus#specifiedRangeCached(long)` in its implementation of `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/TargetPreloadStatusControl`, a non-null instance must be passed.

| Parameters |
|---|---|
| `cache: https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/Cache?` | A `https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/Cache`. |

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder!` | This builder. |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/IllegalStateException.html` | If `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder#build()`, `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder#buildExoPlayer()` or `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder#buildExoPlayer(androidx.media3.exoplayer.ExoPlayer.Builder)` has already been called. |

### setCachingExecutor

```
@CanIgnoreReturnValue
fun setCachingExecutor(executor: Executor!): DefaultPreloadManager.Builder!
```

Sets an `https://developer.android.com/reference/java/util/concurrent/Executor.html` used to cache data.

The default is `Runnable::run`, which will cause each caching task to download data on a separate download thread. Passing an `https://developer.android.com/reference/java/util/concurrent/Executor.html` that uses multiple threads will speed up caching tasks that can be split into smaller parts for parallel execution.

| Parameters |
|---|---|
| `executor: https://developer.android.com/reference/java/util/concurrent/Executor.html!` | An `https://developer.android.com/reference/java/util/concurrent/Executor.html`. |

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder!` | This builder. |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/IllegalStateException.html` | If `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder#build()`, `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder#buildExoPlayer()` or `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder#buildExoPlayer(androidx.media3.exoplayer.ExoPlayer.Builder)` has already been called. |

### setClock

```
@VisibleForTesting
@CanIgnoreReturnValue
fun setClock(clock: Clock!): DefaultPreloadManager.Builder!
```

Sets the `https://developer.android.com/reference/kotlin/androidx/media3/common/util/Clock` that will be used the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager`. Should only be set for testing purposes.

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder!` | This builder. |

### setDataSourceFactory

```
@CanIgnoreReturnValue
fun setDataSourceFactory(dataSourceFactory: DataSource.Factory!): DefaultPreloadManager.Builder!
```

Sets the `https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSource.Factory` that will be used by the built `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager` and `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlayer`.

The `https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSource.Factory` will be used as the upstream `https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSource.Factory` for caching the media items, and propagated to the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource.Factory` used by `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager` and `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlayer` for media source creation. Once set, the `https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSource.Factory` will be passed into the existing `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/MediaSourceFactorySupplier#setDataSourceFactory(androidx.media3.datasource.DataSource.Factory)` on this builder, and the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/MediaSourceFactorySupplier` later set to this builder.

| Parameters |
|---|---|
| `dataSourceFactory: https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSource.Factory!` | A `https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSource.Factory`. |

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder!` | This builder. |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/IllegalStateException.html` | If `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder#build()`, `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder#buildExoPlayer()` or `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder#buildExoPlayer(androidx.media3.exoplayer.ExoPlayer.Builder)` has already been called. |

### setLoadControl

```
@CanIgnoreReturnValue
fun setLoadControl(loadControl: LoadControl!): DefaultPreloadManager.Builder!
```

Sets the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/LoadControl` that will be used by the built `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager` and `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlayer`.

The default is a `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/DefaultLoadControl`.

| Parameters |
|---|---|
| `loadControl: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/LoadControl!` | A `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/LoadControl`. |

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder!` | This builder. |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/IllegalStateException.html` | If `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder#build()`, `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder#buildExoPlayer()` or `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder#buildExoPlayer(androidx.media3.exoplayer.ExoPlayer.Builder)` has already been called. |

### setMediaSourceFactory

```
@CanIgnoreReturnValue
fun [setMediaSourceFactory](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder#setMediaSourceFactory(androidx.media3.exoplayer.source.MediaSource.Factory))(mediaSourceFactory: MediaSource.Factory!): DefaultPreloadManager.Builder!
```

> [!CAUTION]
> **This function is deprecated.**   
>
> Use `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder#setMediaSourceFactorySupplier(androidx.media3.exoplayer.source.preload.MediaSourceFactorySupplier)` instead. If an app still uses this method, it should be aware that the set `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource.Factory` may not have the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder#setCache(androidx.media3.datasource.cache.Cache)` and `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder#setDataSourceFactory(androidx.media3.datasource.DataSource.Factory)` injected.

### setMediaSourceFactorySupplier

```
@CanIgnoreReturnValue
fun setMediaSourceFactorySupplier(
    mediaSourceFactorySupplier: MediaSourceFactorySupplier!
): DefaultPreloadManager.Builder!
```

Sets the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/MediaSourceFactorySupplier` which supplies the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource.Factory` that will be used by the built `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager` and `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlayer`.

The default is a `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/MediaSourceFactorySupplier` that creates a `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/DefaultMediaSourceFactory` with the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder#setCache(androidx.media3.datasource.cache.Cache)` and the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder#setDataSourceFactory(androidx.media3.datasource.DataSource.Factory)`.

| Parameters |
|---|---|
| `mediaSourceFactorySupplier: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/MediaSourceFactorySupplier!` | A `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/MediaSourceFactorySupplier`. |

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder!` | This builder. |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/IllegalStateException.html` | If `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder#build()`, `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder#buildExoPlayer()` or `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder#buildExoPlayer(androidx.media3.exoplayer.ExoPlayer.Builder)` has already been called. |

### setPreloadLooper

```
@CanIgnoreReturnValue
fun setPreloadLooper(preloadLooper: Looper!): DefaultPreloadManager.Builder!
```

Sets the `https://developer.android.com/reference/android/os/Looper.html` that will be used for preload and playback.

The backing thread should run with priority `https://developer.android.com/reference/android/os/Process.html#THREAD_PRIORITY_AUDIO` and should handle messages within 10ms.

The default is a looper that is associated with a new thread created internally.

| Parameters |
|---|---|
| `preloadLooper: https://developer.android.com/reference/android/os/Looper.html!` | A `https://developer.android.com/reference/android/os/Looper.html`. |

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder!` | This builder. |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/IllegalStateException.html` | If `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder#build()`, `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder#buildExoPlayer()` or `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder#buildExoPlayer(androidx.media3.exoplayer.ExoPlayer.Builder)` has already been called, or when the `https://developer.android.com/reference/android/os/Looper.html#getMainLooper()` is passed in. |

### setRenderersFactory

```
@CanIgnoreReturnValue
fun setRenderersFactory(renderersFactory: RenderersFactory!): DefaultPreloadManager.Builder!
```

Sets the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RenderersFactory` that will be used by the built `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager` and `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlayer`.

The default is a `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/DefaultRenderersFactory`.

| Parameters |
|---|---|
| `renderersFactory: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RenderersFactory!` | A `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RenderersFactory`. |

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder!` | This builder. |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/IllegalStateException.html` | If `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder#build()`, `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder#buildExoPlayer()` or `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder#buildExoPlayer(androidx.media3.exoplayer.ExoPlayer.Builder)` has already been called. |

### setTrackSelectorFactory

```
@CanIgnoreReturnValue
fun setTrackSelectorFactory(trackSelectorFactory: TrackSelector.Factory!): DefaultPreloadManager.Builder!
```

Sets the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/trackselection/TrackSelector.Factory` that will be used by the built `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager` and `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlayer`.

The default is a `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/trackselection/TrackSelector.Factory` that always creates a new `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/trackselection/DefaultTrackSelector`.

| Parameters |
|---|---|
| `trackSelectorFactory: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/trackselection/TrackSelector.Factory!` | A `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/trackselection/TrackSelector.Factory`. |

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder!` | This builder. |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/IllegalStateException.html` | If `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder#build()`, `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder#buildExoPlayer()` or `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/DefaultPreloadManager.Builder#buildExoPlayer(androidx.media3.exoplayer.ExoPlayer.Builder)` has already been called. |