Попытка использовать 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???
}
}
}