Size: a a a

Android Architecture

2020 August 10

AI

Arkadii Ivanov in Android Architecture
Konstantin Dovnar
Если есть примеры в открытом доступе — глянул бы. Так сходу не очень понимаю, чем lazy аргумент будет живучее не ленивого.
Ну был аргумент, что из-за пересоздания при перевороте, зависимости второй раз создавать не надо. Эта проблема решается использованием Lazy. Если во фрагменте зависимость передаётся во ViewModel, помог надо её сделать Lazy. Тогда после пересоздания она не будет запрошена и не будет создана.
источник

AI

Arkadii Ivanov in Android Architecture
Примеров нет к сожалению в открытом доступе
источник

AI

Arkadii Ivanov in Android Architecture
Или ещё можно repository: () -> Repository
источник

KD

Konstantin Dovnar in Android Architecture
Arkadii Ivanov
Ну был аргумент, что из-за пересоздания при перевороте, зависимости второй раз создавать не надо. Эта проблема решается использованием Lazy. Если во фрагменте зависимость передаётся во ViewModel, помог надо её сделать Lazy. Тогда после пересоздания она не будет запрошена и не будет создана.
Речь о передаче в конструктор?
источник

AI

Arkadii Ivanov in Android Architecture
Konstantin Dovnar
Речь о передаче в конструктор?
Да
источник

KD

Konstantin Dovnar in Android Architecture
Тогда всё ещё не понятно.

Передал Lazy<Repo> в конструктор во фрагмент.
Переворот произошёл и у фрагмента вызвался пустой конструктор.

Если речь о передаче во VM, который должен переживать пересоздание, то он и просто Repo должен съесть нормально.
источник

AI

Arkadii Ivanov in Android Architecture
Konstantin Dovnar
Тогда всё ещё не понятно.

Передал Lazy<Repo> в конструктор во фрагмент.
Переворот произошёл и у фрагмента вызвался пустой конструктор.

Если речь о передаче во VM, который должен переживать пересоздание, то он и просто Repo должен съесть нормально.
Нет. Посмотрете FragmentFactory. Вы сами вызываете нужный конструктор в контейнере (другой фрагмент или Активити)
источник

KD

Konstantin Dovnar in Android Architecture
Arkadii Ivanov
Нет. Посмотрете FragmentFactory. Вы сами вызываете нужный конструктор в контейнере (другой фрагмент или Активити)
Мы вроде говорили о том, чтобы избежать использование фабрики.
источник

AI

Arkadii Ivanov in Android Architecture
Konstantin Dovnar
Мы вроде говорили о том, чтобы избежать использование фабрики.
Аа. Я думал вы про какие-то фабрики зависимостей на стороне самого фрагмента. Видимо не понял Вас. А так нет, фабрики надо делать. Ну короче фабрики фрагментов специально завезли, чтобы нормально передавать зависимости. И в Активити тоже сделали, но с 29 апи. А дальше дело хозяйское.
источник

Sergey λ in Android Architecture
к слову, фабрики завезли не только для активити, а ко все системным компонентам(ContentProvider, Service, Application, BroadcastReceiver)
источник

KD

Konstantin Dovnar in Android Architecture
Arkadii Ivanov
Аа. Я думал вы про какие-то фабрики зависимостей на стороне самого фрагмента. Видимо не понял Вас. А так нет, фабрики надо делать. Ну короче фабрики фрагментов специально завезли, чтобы нормально передавать зависимости. И в Активити тоже сделали, но с 29 апи. А дальше дело хозяйское.
Да. И вот по мне — городить эти фабрики, именно в кейсах, когда фрагмент это стартовая точка — совершено лишняя дикость. SL тут решает вопрос в разы проще и приятнее.
источник

AI

Arkadii Ivanov in Android Architecture
Konstantin Dovnar
Да. И вот по мне — городить эти фабрики, именно в кейсах, когда фрагмент это стартовая точка — совершено лишняя дикость. SL тут решает вопрос в разы проще и приятнее.
Хорошо! 👍
источник

AD

Aleksey D. in Android Architecture
Konstantin Dovnar
Да. И вот по мне — городить эти фабрики, именно в кейсах, когда фрагмент это стартовая точка — совершено лишняя дикость. SL тут решает вопрос в разы проще и приятнее.
ну, кастить родителя к провайдеру своего компонента - тоже как-то больно и не правильно)
источник

KD

Konstantin Dovnar in Android Architecture
Aleksey D.
ну, кастить родителя к провайдеру своего компонента - тоже как-то больно и не правильно)
Не очень понял о чём ты
источник

AD

Aleksey D. in Android Architecture
Konstantin Dovnar
Не очень понял о чём ты
parentFragment as? DependencyOwner ?: activity as DependencyOwner ?: throw IllegalStateException(«should have parent with dependency owner»)
источник

KD

Konstantin Dovnar in Android Architecture
Aleksey D.
parentFragment as? DependencyOwner ?: activity as DependencyOwner ?: throw IllegalStateException(«should have parent with dependency owner»)
Какой ужас. О таком я, к счастью, речи не вёл
источник

AD

Aleksey D. in Android Architecture
Konstantin Dovnar
Какой ужас. О таком я, к счастью, речи не вёл
альтернатива - передать DependencyOwner в конструктор фрагменту
источник

Sergey λ in Android Architecture
Aleksey D.
альтернатива - передать DependencyOwner в конструктор фрагменту
он же говорит о сервис локаторе
источник

AD

Aleksey D. in Android Architecture
Sergey λ
он же говорит о сервис локаторе
а фрагмент из DependencyOwner методом SL получает необходимые зависимости для построения своих зависимостей
источник

KD

Konstantin Dovnar in Android Architecture
Sergey λ
он же говорит о сервис локаторе
Спасибо
источник