Как использовать LruCache для кэширования объектов, реализующих тот же интерфейс - PullRequest
0 голосов
/ 18 апреля 2019

Попытка использовать LruCache для кэширования некоторых объектов в памяти. LruCache<Int, ISomeInterface)

объекты принадлежат разным классам, но реализованы ISomeInterface.

Вопрос № 1: Будет ли работать LruCache сinterface что касается его значения?

Вопрос # 2: Где в LruCache лучше всего выполнять запрос из базы данных, если значение для ключа не найдено в кэше?

Вопрос № 3: Как будет определяться размер кэша?

в документации "maxSize() : For caches that do not override sizeOf, this returns the maximum number of entries in the cache."

Если он переопределяет sizeOf(), что делаетmaxSize означает ?, и что означает переданный в maxSize, если не имеет переопределения к sizeOf() - что означает определение максимального размера кэша в килобайтах или мегабайтах?

здеськак переопределить sizeOf() ?, он только знает, что объект реализовал интерфейс (и в kotlin нет способа получить размер объекта)?

private lateinit var memoryCache: LruCache<Int, ISomeInterface>
fun cacheSetup() {

    val maxMemory = (Runtime.getRuntime().maxMemory() / 1024).toInt()

    // Use 1/8th of the available memory for this memory cache.
    val cacheSize = maxMemory / 8

    memoryCache = object : LruCache<Int, ISomeInterface>(cacheSize) {

        override fun sizeOf(key: Int, obj: ISomeInterface): Int {
        // The cache size will be measured in kilobytes rather than
        // number of items.
        return super.sizeOf(key, obj) //<=== what to do with it??? 
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...