如何使用LruCache缓存实现相同接口的对象

时间:2019-04-18 13:48:13

标签: android-lru-cache

尝试使用LruCache在内存中缓存某些对象。LruCache<Int, ISomeInterface)

这些对象来自不同的类,但已实现ISomeInterface

问题1:LruCache的价值部分是否可以与interface一起使用?

问题2:如果在缓存中未找到键的值,LruCache中从数据库查询的最佳位置在哪里?

问题3: 如何确定缓存的大小?

documentation "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??? 
        }
    }
}

0 个答案:

没有答案