Android + Picasso: changing URL cache expiration

后端 未结 3 1691
情书的邮戳
情书的邮戳 2020-12-03 06:20

I am using Picasso to download and display images in views all accros my application. Those images are changing very rarely (they are considered valid for a few months).

3条回答
  •  有刺的猬
    2020-12-03 06:48

    Before thinking about HTTP behavior, make sure you set a large max size for the disk cache:

    cache = Cache(File(application.filesDir, "photos"), Long.MAX_VALUE)
    

    (MAX_VALUE is not recommended for production.) Don't store the cache in application.cacheDir, because android can clear that whenever it wants.

    Add an interceptor to set max-stale, which tells the disk cache to use all old files:

        val httpClient = OkHttpClient.Builder().cache(cache).addInterceptor { chain ->
            // When offline, we always want to show old photos.
            val neverExpireCacheControl = CacheControl.Builder().maxStale(Int.MAX_VALUE, TimeUnit.SECONDS).build()
            val origRequest = chain.request()
            val neverExpireRequest = origRequest.newBuilder().cacheControl(neverExpireCacheControl).build()
    
            chain.proceed(neverExpireRequest)
        }.build()
    
        return Picasso.Builder(application).downloader(OkHttp3Downloader(httpClient)).loggingEnabled(true).build()
    

    I discovered this solution by debugging CacheStrategy.getCandidate(). Take a look there if this doesn't solve your problem.

提交回复
热议问题