android - 如何使用 Dagger 异步提供对象?

标签 android dagger

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

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

最佳答案

这是 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对象只会在您需要使用它时被初始化。

关于android - 如何使用 Dagger 异步提供对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36003820/

相关文章:

android - 如何为 Android 创建电子邮件,使其适合屏幕/缩小/缩放,就像在 iOS 中一样

android - 在 EditText 中添加多个可绘制对象

java - Dagger 2 ContributesAndroidInjector 为模块提供 Activity

android - Jenkins:Android 项目构建失败(生成数据绑定(bind)/ Dagger 类失败)

Dagger 2 子组件与组件依赖关系

java - 如何返回 DataSnapshot 值作为方法的结果?

android - Android 和 MySQL/PHP 数据库连接问题

android - 如何将对话框的位置设置为用户单击 MapView 的位置?

java - 错误 : [Dagger/MissingBinding] when trying building the project

android - 我怎样才能将 fragment 注入(inject)到 Activity 中,这样我就不必手动创建它的实例了?