[Coil]キャッシュサイズを変更する方法


Androidの画像ローディングライブラリCoilでディスクキャッシュのサイズを変更する方法を調べたのでメモがてら記事にします。

方法

CoilはOkHttpのディスクキャッシュ機構を利用しています。
したがって、キャッシュのサイズを変更するにはOkHttpClientを置き換えます。

Coil.kt
val cache = Cache(
    directory = File(context.cacheDir, "image_cache"),
    maxSize = 500L * 1024L * 1024L // 500 MB
)
val imageLoader = ImageLoader.Builder(context)
    .okHttpClient {
        OkHttpClient.Builder()
            .cache(cache)
            .build()
    }
    .build()

アプリ内で共通のキャッシュ(ImageLoader)を利用したい場合は、ApplicationクラスでCoil.setImageLoader()メソッドを利用してImageLoaderをセットします。

MyApp.kt
class MyApp : Application() {
    override fun onCreate() {
        val cache = Cache(
            directory = File(cacheDir, "image_cache"),
            maxSize = 500L * 1024L * 1024L
        )
        val imageLoader = ImageLoader.Builder(applicationContext)
            .okHttpClient {
                OkHttpClient.Builder()
                    .cache(cache)
                    .build()
            }
            .build()
        Coil.setImageLoader(imageLoader)
    }
}

キャッシュを削除する場合は、Cache.delete()Cache.evictAll()メソッドを利用します。
CacheインスタンスはDIなどを用いてシングルトンとして扱うのが良いと思います。

MyRepository.kt

class MyRepository @Inject constructor(
    private val cache: Cache,
) {
    fun deleteCache() {
        cache.evictAll()
    }
}