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