Как обеспечить объект асинхронно с Dagger?

Я использую Dagger1 и у меня есть список шуток. В моем AwesomeJokeModule я предоставляю список. Список предоставляется JokeDataLayer.getJokeCache(). Дело в том, что если Cache еще не создан, метод getJokeCache () попадает в БД, получая огромный список шуток. Это может занять некоторое время, и при добавлении моих шуток в мою активность это может вызвать замедление, так как шутки являются частью моей активности. Каков наилучший способ ввести участника в асинхронное действие типа Activity?

Некоторые вещи, о которых я подумал, заключались в том, чтобы сразу же вернуть пустой список, если кэш еще не создан, и затем каким-то образом попытаться сообщить, что кэш обновлен? Но мне кажется, что я обхожу Dagger/DI. Любой совет или способы сделать это?

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 Объект будет инициализирован только тогда, когда вам нужно его использовать.

Другие вопросы по тегам