# PreCacheHelper.Factory

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

*** ** * ** ***


```
class PreCacheHelper.Factory
```

<br />

*** ** * ** ***

A factory for `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/PreCacheHelper`.

## Summary

| ### Public constructors |
|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/PreCacheHelper.Factory#Factory(android.content.Context,androidx.media3.datasource.cache.Cache,android.os.Looper)(context: https://developer.android.com/reference/android/content/Context.html!, cache: https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/Cache!, preCacheLooper: https://developer.android.com/reference/android/os/Looper.html!)` Creates a `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/PreCacheHelper.Factory`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/PreCacheHelper.Factory#Factory(androidx.media3.datasource.cache.Cache,androidx.media3.datasource.DataSource.Factory,androidx.media3.exoplayer.RenderersFactory,android.os.Looper)( cache: https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/Cache!, upstreamDataSourceFactory: https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSource.Factory!, renderersFactory: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RenderersFactory!, preCacheLooper: https://developer.android.com/reference/android/os/Looper.html! )` Creates a `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/PreCacheHelper.Factory`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/PreCacheHelper.Factory#Factory(android.content.Context,androidx.media3.datasource.cache.Cache,androidx.media3.exoplayer.RenderersFactory,android.os.Looper)( context: https://developer.android.com/reference/android/content/Context.html!, cache: https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/Cache!, renderersFactory: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RenderersFactory!, preCacheLooper: https://developer.android.com/reference/android/os/Looper.html! )` Creates a `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/PreCacheHelper.Factory`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/PreCacheHelper.Factory#Factory(android.content.Context,androidx.media3.datasource.cache.Cache,androidx.media3.datasource.DataSource.Factory,android.os.Looper)( context: https://developer.android.com/reference/android/content/Context.html!, cache: https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/Cache!, upstreamDataSourceFactory: https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSource.Factory!, preCacheLooper: https://developer.android.com/reference/android/os/Looper.html! )` Creates a `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/PreCacheHelper.Factory`. |

| ### Public functions |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/PreCacheHelper!` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/PreCacheHelper.Factory#create(androidx.media3.common.MediaItem)(mediaItem: https://developer.android.com/reference/kotlin/androidx/media3/common/MediaItem!)` Creates a `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/PreCacheHelper` instance. |
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/PreCacheHelper.Factory!` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/PreCacheHelper.Factory#setDownloadExecutor(java.util.concurrent.Executor)(downloadExecutor: https://developer.android.com/reference/java/util/concurrent/Executor.html!)` Sets an `https://developer.android.com/reference/java/util/concurrent/Executor.html` used to download data. |
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/PreCacheHelper.Factory!` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/PreCacheHelper.Factory#setListener(androidx.media3.exoplayer.source.preload.PreCacheHelper.Listener)(listener: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/PreCacheHelper.Listener?)` Sets the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/PreCacheHelper.Listener`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/PreCacheHelper.Factory!` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/PreCacheHelper.Factory#setTrackSelectionParameters(androidx.media3.common.TrackSelectionParameters)( trackSelectionParameters: https://developer.android.com/reference/kotlin/androidx/media3/common/TrackSelectionParameters! )` Sets a `https://developer.android.com/reference/kotlin/androidx/media3/common/TrackSelectionParameters` for selecting tracks for pre-caching. |

## Public constructors

### Factory

```
Factory(context: Context!, cache: Cache!, preCacheLooper: Looper!)
```

Creates a `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/PreCacheHelper.Factory`.

| Parameters |
|---|---|
| `context: https://developer.android.com/reference/android/content/Context.html!` | The `https://developer.android.com/reference/android/content/Context.html`. |
| `cache: https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/Cache!` | The `https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/Cache` instance that will be used. |
| `preCacheLooper: https://developer.android.com/reference/android/os/Looper.html!` | The `https://developer.android.com/reference/android/os/Looper.html` that operates the pre-caching flow. Note that this looper is not responsible for downloading the data. |

### Factory

```
Factory(
    cache: Cache!,
    upstreamDataSourceFactory: DataSource.Factory!,
    renderersFactory: RenderersFactory!,
    preCacheLooper: Looper!
)
```

Creates a `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/PreCacheHelper.Factory`.

| Parameters |
|---|---|
| `cache: https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/Cache!` | The `https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/Cache` instance that will be used. |
| `upstreamDataSourceFactory: https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSource.Factory!` | The upstream `https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSource.Factory` for reading data not in the cache. |
| `renderersFactory: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RenderersFactory!` | The `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RenderersFactory` creating the renderers for which tracks are selected. |
| `preCacheLooper: https://developer.android.com/reference/android/os/Looper.html!` | The `https://developer.android.com/reference/android/os/Looper.html` that operates the pre-caching flow. Note that this looper is not responsible for downloading the data. |

### Factory

```
Factory(
    context: Context!,
    cache: Cache!,
    renderersFactory: RenderersFactory!,
    preCacheLooper: Looper!
)
```

Creates a `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/PreCacheHelper.Factory`.

| Parameters |
|---|---|
| `context: https://developer.android.com/reference/android/content/Context.html!` | The `https://developer.android.com/reference/android/content/Context.html`. |
| `cache: https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/Cache!` | The `https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/Cache` instance that will be used. |
| `renderersFactory: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RenderersFactory!` | The `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RenderersFactory` creating the renderers for which tracks are selected. |
| `preCacheLooper: https://developer.android.com/reference/android/os/Looper.html!` | The `https://developer.android.com/reference/android/os/Looper.html` that operates the pre-caching flow. Note that this looper is not responsible for downloading the data. |

### Factory

```
Factory(
    context: Context!,
    cache: Cache!,
    upstreamDataSourceFactory: DataSource.Factory!,
    preCacheLooper: Looper!
)
```

Creates a `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/PreCacheHelper.Factory`.

| Parameters |
|---|---|
| `context: https://developer.android.com/reference/android/content/Context.html!` | The `https://developer.android.com/reference/android/content/Context.html`. |
| `cache: https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/Cache!` | The `https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/Cache` instance that will be used. |
| `upstreamDataSourceFactory: https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSource.Factory!` | The upstream `https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSource.Factory` for reading data not in the cache. |
| `preCacheLooper: https://developer.android.com/reference/android/os/Looper.html!` | The `https://developer.android.com/reference/android/os/Looper.html` that operates the pre-caching flow. Note that this looper is not responsible for downloading the data. |

## Public functions

### create

```
fun create(mediaItem: MediaItem!): PreCacheHelper!
```

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

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

### setDownloadExecutor

```
@CanIgnoreReturnValue
fun setDownloadExecutor(downloadExecutor: Executor!): PreCacheHelper.Factory!
```

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

The default is `Runnable::run`.

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

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/PreCacheHelper.Factory!` | This factory, for convenience. |

### setListener

```
@CanIgnoreReturnValue
fun setListener(listener: PreCacheHelper.Listener?): PreCacheHelper.Factory!
```

Sets the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/PreCacheHelper.Listener`.

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/PreCacheHelper.Factory!` | This factory, for convenience. |

### setTrackSelectionParameters

```
@CanIgnoreReturnValue
fun setTrackSelectionParameters(
    trackSelectionParameters: TrackSelectionParameters!
): PreCacheHelper.Factory!
```

Sets a `https://developer.android.com/reference/kotlin/androidx/media3/common/TrackSelectionParameters` for selecting tracks for pre-caching.

The default is `https://developer.android.com/reference/kotlin/androidx/media3/common/TrackSelectionParameters#DEFAULT()`.

This is only used for adaptive streams.

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/PreCacheHelper.Factory!` | This factory, for convenience. |