如何用Dagger异步提供一个物体?

时间:2016-03-15 06:07:25

标签: android dagger

我使用Dagger1并且我有一个笑话列表。在我的AwesomeJokeModule中,我提供了一个List。该列表由JokeDataLayer.getJokeCache()提供。问题是,如果缓存尚未构建,则getJokeCache()方法会在数据库中获取大量的笑话。这可能需要一段时间,并且在将我的笑话注入我的活动时,由于笑话是我的活动的成员,这可能会导致速度减慢。什么是将成员异步注入活动的最佳方式?

我想到的一些事情是,如果缓存尚未构建,则立即返回一个空列表,然后以某种方式尝试通知缓存已更新?但感觉就像是在绕过Dagger / DI。有任何建议或方法吗?

1 个答案:

答案 0 :(得分:1)

这是Lazy<T>的用途。考虑使用LAZY INJECTION

class GridingCoffeeMaker {
  @Inject Lazy<Grinder> lazyGrinder;

  public void brew() {
    while (needsGrinding()) {
      // Grinder created once on first call to .get() and cached.
      lazyGrinder.get().grind();
    }
  }
}

只有在您需要使用它时才会初始化此lazyGrinder对象。