RoboSpice的getFromCache()花了这么长时间吗?

时间:2014-05-29 04:25:13

标签: java android robospice

我正在尝试在应用中使用 RoboSpice + Retrofit + Jackson 。当我打开一个活动时,我想检查资源是否已经被缓存,如果是,只需更新视图,否则,发出新请求并等待答案。所有这一切都运行正常,但我注意到getFromCache()方法需要花费很多时间。

我使用LRUCache实现了缓存(通过修改默认的Retrofit persister),如下所示:

@Override
public <T> ObjectPersister<T> createObjectPersister(Class<T> clazz) throws CacheCreationException {
    try {
        return new LruCacheObjectPersister<T>(new RetrofitObjectPersister<T>(getApplication(), converter, clazz), new LruCache<Object, CacheItem<T>>(20)); // TODO: Set a max size
    } catch (CacheCreationException e) {
        throw new RuntimeException("Could not create cache for class '" + clazz.getName() + "'", e);
    }
}

正如我所说,缓存工作正常,我调试了所有内容并且正在按预期使用LRUCache,以及实际上是磁盘缓存的RetrofitObjectPersister

话虽如此,我的问题是:

即使对象在内存缓存中,getFromCache()方法需要花费大量时间,这是正常的吗?我理解从磁盘缓存中检索的对象应该是值得注意的,但我不明白为什么从内存中获取对象需要很长时间?这可能与 RoboSpice 的服务架构有关吗?

非常感谢任何帮助。

非常感谢,

马托

1 个答案:

答案 0 :(得分:0)

你花了很多时间是什么意思?你能给出数字(也许比较数字与你的缓存装饰器,没有它)?

由于RS的设计总是从Android服务内部执行异步代码,因此它们可能是开销。基本上,在缓存中获取内容的往返是:

SpiceManager -> SpiceService -> ExecutorService -> Thread -> CacheManager
             <-              <-                 <-        <-

这肯定有点贵,但RS的设计。通常开销只有几毫秒。