# CacheDataSource.Factory

Artifact: [androidx.media3:media3-datasource](https://developer.android.com/jetpack/androidx/releases/media3) [View Source](https://cs.android.com/search?q=file:androidx/media3/datasource/cache/CacheDataSource.java+class:androidx.media3.datasource.cache.CacheDataSource.Factory)

*** ** * ** ***


```
public final class CacheDataSource.Factory implements DataSource.Factory
```

<br />

*** ** * ** ***

`https://developer.android.com/reference/androidx/media3/datasource/DataSource.Factory` for `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheDataSource` instances.

## Summary

| ### Public fields |
|---|---|
| `@https://checkerframework.org/api/org/checkerframework/checker/nullness/qual/MonotonicNonNull.html https://developer.android.com/reference/androidx/media3/datasource/cache/Cache` | `@https://checkerframework.org/api/org/checkerframework/checker/nullness/qual/MonotonicNonNull.html https://developer.android.com/reference/androidx/media3/datasource/cache/CacheDataSource.Factory#cache()` |
| `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheKeyFactory` | `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheDataSource.Factory#cacheKeyFactory()` |
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/common/PriorityTaskManager` | `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheDataSource.Factory#upstreamPriorityTaskManager()` |

| ### Public constructors |
|---|
| `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheDataSource.Factory#Factory()()` |

| ### Public methods |
|---|---|
| `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheDataSource` | `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheDataSource.Factory#createDataSource()()` Creates a `https://developer.android.com/reference/androidx/media3/datasource/DataSource` instance. |
| `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheDataSource` | `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheDataSource.Factory#createDataSourceForDownloading()()` Returns an instance suitable for downloading content. |
| `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheDataSource` | `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheDataSource.Factory#createDataSourceForRemovingDownload()()` Returns an instance suitable for reading cached content as part of removing a download. |
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/datasource/cache/Cache` | `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheDataSource.Factory#getCache()()` Returns the cache that will be used, or `null` if `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheDataSource.Factory#setCache(androidx.media3.datasource.cache.Cache)` has yet to be called. |
| `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheKeyFactory` | `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheDataSource.Factory#getCacheKeyFactory()()` Returns the `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheKeyFactory` that will be used. |
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/common/PriorityTaskManager` | `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheDataSource.Factory#getUpstreamPriorityTaskManager()()` Returns the `https://developer.android.com/reference/androidx/media3/common/PriorityTaskManager` that will bs used when requesting data from upstream, or `null` if there is none. |
| `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheDataSource.Factory` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/androidx/media3/datasource/cache/CacheDataSource.Factory#setCache(androidx.media3.datasource.cache.Cache)(https://developer.android.com/reference/androidx/media3/datasource/cache/Cache cache)` Sets the cache that will be used. |
| `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheDataSource.Factory` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/androidx/media3/datasource/cache/CacheDataSource.Factory#setCacheKeyFactory(androidx.media3.datasource.cache.CacheKeyFactory)(https://developer.android.com/reference/androidx/media3/datasource/cache/CacheKeyFactory cacheKeyFactory)` Sets the `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheKeyFactory`. |
| `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheDataSource.Factory` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/androidx/media3/datasource/cache/CacheDataSource.Factory#setCacheReadDataSourceFactory(androidx.media3.datasource.DataSource.Factory)( https://developer.android.com/reference/androidx/media3/datasource/DataSource.Factory cacheReadDataSourceFactory )` Sets the `https://developer.android.com/reference/androidx/media3/datasource/DataSource.Factory` for `https://developer.android.com/reference/androidx/media3/datasource/DataSource` for reading from the cache. |
| `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheDataSource.Factory` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/androidx/media3/datasource/cache/CacheDataSource.Factory#setCacheWriteDataSinkFactory(androidx.media3.datasource.DataSink.Factory)( @https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/datasource/DataSink.Factory cacheWriteDataSinkFactory )` Sets the `https://developer.android.com/reference/androidx/media3/datasource/DataSink.Factory` for generating `https://developer.android.com/reference/androidx/media3/datasource/DataSink` for writing data to the cache. |
| `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheDataSource.Factory` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/androidx/media3/datasource/cache/CacheDataSource.Factory#setEventListener(androidx.media3.datasource.cache.CacheDataSource.EventListener)(@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/datasource/cache/CacheDataSource.EventListener eventListener)` Sets the {link EventListener} to which events are delivered. |
| `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheDataSource.Factory` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/androidx/media3/datasource/cache/CacheDataSource.Factory#setFlags(int)(@https://developer.android.com/reference/androidx/media3/datasource/cache/CacheDataSource.Flags int flags)` Sets the `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheDataSource.Flags`. |
| `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheDataSource.Factory` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/androidx/media3/datasource/cache/CacheDataSource.Factory#setUpstreamDataSourceFactory(androidx.media3.datasource.DataSource.Factory)( @https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/datasource/DataSource.Factory upstreamDataSourceFactory )` Sets the `https://developer.android.com/reference/androidx/media3/datasource/DataSource.Factory` for upstream `https://developer.android.com/reference/androidx/media3/datasource/DataSource`, which are used to read data in the case of a cache miss. |
| `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheDataSource.Factory` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/androidx/media3/datasource/cache/CacheDataSource.Factory#setUpstreamPriority(int)(@https://developer.android.com/reference/androidx/media3/common/C.Priority int upstreamPriority)` Sets the `https://developer.android.com/reference/androidx/media3/common/C.Priority` to use when requesting data from upstream. |
| `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheDataSource.Factory` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/androidx/media3/datasource/cache/CacheDataSource.Factory#setUpstreamPriorityTaskManager(androidx.media3.common.PriorityTaskManager)( @https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/common/PriorityTaskManager upstreamPriorityTaskManager )` Sets an optional `https://developer.android.com/reference/androidx/media3/common/PriorityTaskManager` to use when requesting data from upstream. |

## Public fields

### cache

```
@MonotonicNonNull
public @MonotonicNonNull Cache cache
```

### cacheKeyFactory

```
public CacheKeyFactory cacheKeyFactory
```

### upstreamPriorityTaskManager

```
public @Nullable PriorityTaskManager upstreamPriorityTaskManager
```

## Public constructors

### Factory

```
public Factory()
```

## Public methods

### createDataSource

```
public CacheDataSource createDataSource()
```

Creates a `https://developer.android.com/reference/androidx/media3/datasource/DataSource` instance.

### createDataSourceForDownloading

```
public CacheDataSource createDataSourceForDownloading()
```

Returns an instance suitable for downloading content. The created instance is equivalent to one that would be created by `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheDataSource.Factory#createDataSource()`, except:

- The `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheDataSource#FLAG_BLOCK_ON_CACHE()` is always set.
- The task priority is overridden to be `https://developer.android.com/reference/androidx/media3/common/C#PRIORITY_DOWNLOAD()`.

| Returns |
|---|---|
| `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheDataSource` | An instance suitable for downloading content. |

### createDataSourceForRemovingDownload

```
public CacheDataSource createDataSourceForRemovingDownload()
```

Returns an instance suitable for reading cached content as part of removing a download. The created instance is equivalent to one that would be created by `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheDataSource.Factory#createDataSource()`, except:

- The upstream is overridden to be `null`, since when removing content we don't want to request anything that's not already cached.
- The `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheDataSource#FLAG_BLOCK_ON_CACHE()` is always set.
- The task priority is overridden to be `https://developer.android.com/reference/androidx/media3/common/C#PRIORITY_DOWNLOAD()`.

| Returns |
|---|---|
| `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheDataSource` | An instance suitable for reading cached content as part of removing a download. |

### getCache

```
public @Nullable Cache getCache()
```

Returns the cache that will be used, or `null` if `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheDataSource.Factory#setCache(androidx.media3.datasource.cache.Cache)` has yet to be called.

### getCacheKeyFactory

```
public CacheKeyFactory getCacheKeyFactory()
```

Returns the `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheKeyFactory` that will be used.

### getUpstreamPriorityTaskManager

```
public @Nullable PriorityTaskManager getUpstreamPriorityTaskManager()
```

Returns the `https://developer.android.com/reference/androidx/media3/common/PriorityTaskManager` that will bs used when requesting data from upstream, or `null` if there is none.

### setCache

```
@CanIgnoreReturnValue
public CacheDataSource.Factory setCache(Cache cache)
```

Sets the cache that will be used.

Must be called before the factory is used.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/datasource/cache/Cache cache` | The cache that will be used. |

| Returns |
|---|---|
| `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheDataSource.Factory` | This factory. |

### setCacheKeyFactory

```
@CanIgnoreReturnValue
public CacheDataSource.Factory setCacheKeyFactory(CacheKeyFactory cacheKeyFactory)
```

Sets the `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheKeyFactory`.

The default is `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheKeyFactory#DEFAULT()`.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheKeyFactory cacheKeyFactory` | The `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheKeyFactory`. |

| Returns |
|---|---|
| `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheDataSource.Factory` | This factory. |

### setCacheReadDataSourceFactory

```
@CanIgnoreReturnValue
public CacheDataSource.Factory setCacheReadDataSourceFactory(
    DataSource.Factory cacheReadDataSourceFactory
)
```

Sets the `https://developer.android.com/reference/androidx/media3/datasource/DataSource.Factory` for `https://developer.android.com/reference/androidx/media3/datasource/DataSource` for reading from the cache.

The default is a `https://developer.android.com/reference/androidx/media3/datasource/FileDataSource.Factory` in its default configuration.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/datasource/DataSource.Factory cacheReadDataSourceFactory` | The `https://developer.android.com/reference/androidx/media3/datasource/DataSource.Factory` for reading from the cache. |

| Returns |
|---|---|
| `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheDataSource.Factory` | This factory. |

### setCacheWriteDataSinkFactory

```
@CanIgnoreReturnValue
public CacheDataSource.Factory setCacheWriteDataSinkFactory(
    @Nullable DataSink.Factory cacheWriteDataSinkFactory
)
```

Sets the `https://developer.android.com/reference/androidx/media3/datasource/DataSink.Factory` for generating `https://developer.android.com/reference/androidx/media3/datasource/DataSink` for writing data to the cache. Passing `null` causes the cache to be read-only.

The default is a `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheDataSink.Factory` in its default configuration.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/datasource/DataSink.Factory cacheWriteDataSinkFactory` | The `https://developer.android.com/reference/androidx/media3/datasource/DataSink.Factory` for generating `https://developer.android.com/reference/androidx/media3/datasource/DataSink` for writing data to the cache, or `null` to disable writing. |

| Returns |
|---|---|
| `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheDataSource.Factory` | This factory. |

### setEventListener

```
@CanIgnoreReturnValue
public CacheDataSource.Factory setEventListener(@Nullable CacheDataSource.EventListener eventListener)
```

Sets the {link EventListener} to which events are delivered.

The default is `null`.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/datasource/cache/CacheDataSource.EventListener eventListener` | The `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheDataSource.EventListener`. |

| Returns |
|---|---|
| `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheDataSource.Factory` | This factory. |

### setFlags

```
@CanIgnoreReturnValue
public CacheDataSource.Factory setFlags(@CacheDataSource.Flags int flags)
```

Sets the `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheDataSource.Flags`.

The default is `0`.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/media3/datasource/cache/CacheDataSource.Flags int flags` | The `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheDataSource.Flags`. |

| Returns |
|---|---|
| `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheDataSource.Factory` | This factory. |

### setUpstreamDataSourceFactory

```
@CanIgnoreReturnValue
public CacheDataSource.Factory setUpstreamDataSourceFactory(
    @Nullable DataSource.Factory upstreamDataSourceFactory
)
```

Sets the `https://developer.android.com/reference/androidx/media3/datasource/DataSource.Factory` for upstream `https://developer.android.com/reference/androidx/media3/datasource/DataSource`, which are used to read data in the case of a cache miss.

The default is `null`, and so this method must be called before the factory is used in order for data to be read from upstream in the case of a cache miss.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/datasource/DataSource.Factory upstreamDataSourceFactory` | The upstream `https://developer.android.com/reference/androidx/media3/datasource/DataSource` for reading data not in the cache, or `null` to cause failure in the case of a cache miss. |

| Returns |
|---|---|
| `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheDataSource.Factory` | This factory. |

### setUpstreamPriority

```
@CanIgnoreReturnValue
public CacheDataSource.Factory setUpstreamPriority(@C.Priority int upstreamPriority)
```

Sets the `https://developer.android.com/reference/androidx/media3/common/C.Priority` to use when requesting data from upstream. The priority is only used if a `https://developer.android.com/reference/androidx/media3/common/PriorityTaskManager` is set by calling `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheDataSource.Factory#setUpstreamPriorityTaskManager(androidx.media3.common.PriorityTaskManager)`.

The default is `https://developer.android.com/reference/androidx/media3/common/C#PRIORITY_PLAYBACK()`.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/media3/common/C.Priority int upstreamPriority` | The `https://developer.android.com/reference/androidx/media3/common/C.Priority` to use when requesting data from upstream. |

| Returns |
|---|---|
| `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheDataSource.Factory` | This factory. |

### setUpstreamPriorityTaskManager

```
@CanIgnoreReturnValue
public CacheDataSource.Factory setUpstreamPriorityTaskManager(
    @Nullable PriorityTaskManager upstreamPriorityTaskManager
)
```

Sets an optional `https://developer.android.com/reference/androidx/media3/common/PriorityTaskManager` to use when requesting data from upstream.

If set, reads from the upstream `https://developer.android.com/reference/androidx/media3/datasource/DataSource` will only be allowed to proceed if there are no higher priority tasks registered to the `https://developer.android.com/reference/androidx/media3/common/PriorityTaskManager`. If there exists a higher priority task then `https://developer.android.com/reference/androidx/media3/common/PriorityTaskManager.PriorityTooLowException` will be thrown instead.

Note that requests to `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheDataSource` instances are intended to be used as parts of (possibly larger) tasks that are registered with the `https://developer.android.com/reference/androidx/media3/common/PriorityTaskManager`, and hence `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheDataSource` does *not* register a task by itself. This must be done by the surrounding code that uses the `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheDataSource` instances.

The default is `null`.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/common/PriorityTaskManager upstreamPriorityTaskManager` | The upstream `https://developer.android.com/reference/androidx/media3/common/PriorityTaskManager`. |

| Returns |
|---|---|
| `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheDataSource.Factory` | This factory. |