OkHttp с TTL - PullRequest
       20

OkHttp с TTL

0 голосов
/ 04 октября 2018

Я использую OkHttp, чтобы получить некоторые данные из бэкэнда при запуске приложения.Запрос выполняется только один раз.Строка ответа анализируется в классе данных, сохраняется в памяти и используется в течение времени жизни приложения.Теперь бэкэнд попросил меня кешировать некоторые данные с помощью TTL.

if some_key in cache: return cache.get(some_key)
else:
    get value, ttl from BE.
    populate cache with ttl
    return value

Какой самый быстрый способ реализовать это?

1 Ответ

0 голосов
/ 04 октября 2018

При создании экземпляра OkHttpClient просто примените метод .cache к сборщику следующим образом:

val okHttpClient = OkHttpClient.Builder()
    .cache(Cache(context.getCacheDir(), cacheSize)
    .build()

Редактировать:

Чтобы повторить запрос после истечения срока действия тела, вы должны сначалаполучите максимальное значение возраста из запроса:

val cacheControl = CacheControl.parse(data.headers())
val maxAge = cacheControl.maxAgeSeconds()

И затем запланируйте следующий запрос с помощью чего-то вроде JobScheduler или AlarmManager, или если вы уверены, что текущий поток не будет уничтожен до следующего запроса, вы можетепросто опубликовать отложенный runnable:

Handler().postDelayed({
    // make request
}, cacheControl.maxAgeSeconds().toLong().times(1000))
...