Android 基于内存差异对象类型的RoboSpice缓存

Android 基于内存差异对象类型的RoboSpice缓存,android,robospice,Android,Robospice,看一看,这是一个内存中的对象持久器,基于Android LRUCache。我想扩展这个基类来缓存内存中字符串或位图旁边的任何POJO类。我的目标是在内存中执行多种请求,并在缓存中获得结果,如下所示: class Request1 extends SpiceRequest<Book>{} class Request2 extends SpiceRequest<Category>{} getSpiceManager().execute(new Request1(

看一看,这是一个内存中的对象持久器,基于Android LRUCache。我想扩展这个基类来缓存内存中字符串或位图旁边的任何POJO类。我的目标是在内存中执行多种请求,并在缓存中获得结果,如下所示:

  class Request1 extends SpiceRequest<Book>{}
  class Request2 extends SpiceRequest<Category>{}

  getSpiceManager().execute(new Request1(), CACHE_KEY, 5 * DurationInMillis.ONE_MINUTE, new RequestListener<Book>(){}); 

  getSpiceManager().execute(new Request2(), CACHE_KEY, 5 * DurationInMillis.ONE_MINUTE, new RequestListener<Category>(){});
  @Override
public CacheManager createCacheManager(Application application) {
    CacheManager cacheManager = new CacheManager();

    // I want to store any types instead of bitmap
    LruCacheBitmapObjectPersister lruCacheBitmapObjectPersister = new LruCacheBitmapObjectPersister(inFileBitmapObjectPersister, 1024*1024);
    cacheManager.addPersister(inFileBitmapObjectPersister);

    return cacheManager;
} 

如何执行此操作?

您应该创建一个自定义LruCacheXXXXObjectPersister,并将其注册到自定义服务中。遵循位图的操作方式,并为您自己的pojo保留相同的机制。

因此,如果我对每个pojo有100个不同的请求,我必须创建100个持久化器?我想要的是适用于所有类型的多功能持久器。这是基本持久器的功能,但在磁盘上,使用JSON进行磁盘缓存(例如,如果使用JSON网络格式,这非常容易)。但要在Lru中持久化Pojo则更为困难,您可以得到一些通用的东西,但是您需要定义一个规则,让您计算RAM中每个项目的大小。我真的认为这一点很难。你真的确定基于磁盘的缓存不够高效吗?我从来没有遇到过这样的情况。当然我可以做磁盘缓存,但我希望我的结果应该在ram中准备好,它可以随时清除,我不想处理缓存文件。看来我的问题是处理泛型类型,让它接受我认为可以实现的任何类型。不要忘记,缓存管理器会按顺序存储持久器。首先,您可以为特定类型(如位图)注册一些非常特定的对象持久器。然后,如果您注册另一个声称可以处理所有事情的持久器或工厂,它将负责序列化其余类型。在这种情况下,RAM Lru缓存面临的最大挑战是评估RAM中不同类型的每个Pojo的大小。我不知道如何通过编程获得这个大小,但您可以通过将类分解为原语来“手动”估计它。