# CacheEvictor

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/CacheEvictor.java+class:androidx.media3.datasource.cache.CacheEvictor)

*** ** * ** ***


```
@UnstableApi
public interface CacheEvictor extends Cache.Listener
```

<br />

Known direct subclasses [LeastRecentlyUsedCacheEvictor](https://developer.android.com/reference/androidx/media3/datasource/cache/LeastRecentlyUsedCacheEvictor), [NoOpCacheEvictor](https://developer.android.com/reference/androidx/media3/datasource/cache/NoOpCacheEvictor)

|---|---|
| `https://developer.android.com/reference/androidx/media3/datasource/cache/LeastRecentlyUsedCacheEvictor` | Evicts least recently used cache files first. |
| `https://developer.android.com/reference/androidx/media3/datasource/cache/NoOpCacheEvictor` | Evictor that doesn't ever evict cache files. |

*** ** * ** ***

Evicts data from a `https://developer.android.com/reference/androidx/media3/datasource/cache/Cache`. Implementations should call `https://developer.android.com/reference/androidx/media3/datasource/cache/Cache#removeSpan(androidx.media3.datasource.cache.CacheSpan)` to evict cache entries based on their eviction policies.

## Summary

| ### Public methods |
|---|---|
| `abstract void` | `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheEvictor#onCacheInitialized()()` Called when cache has been initialized. |
| `abstract void` | `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheEvictor#onStartFile(androidx.media3.datasource.cache.Cache,java.lang.String,long,long)(https://developer.android.com/reference/androidx/media3/datasource/cache/Cache cache, https://developer.android.com/reference/java/lang/String.html key, long position, long length)` Called when a writer starts writing to the cache. |
| `abstract boolean` | `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheEvictor#requiresCacheSpanTouches()()` Returns whether the evictor requires the `https://developer.android.com/reference/androidx/media3/datasource/cache/Cache` to touch `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheSpan` when it accesses them. |

| ### Inherited methods |
|---|
| From [androidx.media3.datasource.cache.Cache.Listener](https://developer.android.com/reference/androidx/media3/datasource/cache/Cache.Listener) |---|---| | `abstract void` | `https://developer.android.com/reference/androidx/media3/datasource/cache/Cache.Listener#onSpanAdded(androidx.media3.datasource.cache.Cache,androidx.media3.datasource.cache.CacheSpan)(https://developer.android.com/reference/androidx/media3/datasource/cache/Cache cache, https://developer.android.com/reference/androidx/media3/datasource/cache/CacheSpan span)` Called when a `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheSpan` is added to the cache. | | `abstract void` | `https://developer.android.com/reference/androidx/media3/datasource/cache/Cache.Listener#onSpanRemoved(androidx.media3.datasource.cache.Cache,androidx.media3.datasource.cache.CacheSpan)(https://developer.android.com/reference/androidx/media3/datasource/cache/Cache cache, https://developer.android.com/reference/androidx/media3/datasource/cache/CacheSpan span)` Called when a `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheSpan` is removed from the cache. | | `abstract void` | `https://developer.android.com/reference/androidx/media3/datasource/cache/Cache.Listener#onSpanTouched(androidx.media3.datasource.cache.Cache,androidx.media3.datasource.cache.CacheSpan,androidx.media3.datasource.cache.CacheSpan)(https://developer.android.com/reference/androidx/media3/datasource/cache/Cache cache, https://developer.android.com/reference/androidx/media3/datasource/cache/CacheSpan oldSpan, https://developer.android.com/reference/androidx/media3/datasource/cache/CacheSpan newSpan)` Called when an existing `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheSpan` is touched, causing it to be replaced. | |

## Public methods

### onCacheInitialized

```
abstract void onCacheInitialized()
```

Called when cache has been initialized.

### onStartFile

```
abstract void onStartFile(Cache cache, String key, long position, long length)
```

Called when a writer starts writing to the cache.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/datasource/cache/Cache cache` | The source of the event. |
| `https://developer.android.com/reference/java/lang/String.html key` | The key being written. |
| `long position` | The starting position of the data being written. |
| `long length` | The length of the data being written, or `https://developer.android.com/reference/androidx/media3/common/C#LENGTH_UNSET()` if unknown. |

### requiresCacheSpanTouches

```
abstract boolean requiresCacheSpanTouches()
```

Returns whether the evictor requires the `https://developer.android.com/reference/androidx/media3/datasource/cache/Cache` to touch `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheSpan` when it accesses them. Implementations that do not use `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheSpan#lastTouchTimestamp()` should return `false`.