Size: a a a

Android Architecture

2020 August 29

ES

Egor Sigolaev in Android Architecture
Singular
@Singleton
@Component
interface AppComponent {
   fun getMainViewModel(): MainViewModel
}

@Singleton
class MainViewModel @Inject constructor() : ViewModel() {


//FIRST_ACTIVITIY
@Inject lateinit var viewModel: MainViewModel
override fun onCreate(savedInstanceState: Bundle?) {
       super.onCreate(savedInstanceState)
       viewModel = App.dagger.getMainViewModel()

//TWO_ACTIVITIY
val viewModel:MainViewModel by lazy { App.dagger.getMainViewModel() }


В чем разница между двумя способами инициализации и зачем нужен Dagger, когда можно заюзать как object
Ты можешь в onCreate передавать параметры в метод инита вью модели
источник

ES

Egor Sigolaev in Android Architecture
Egor Sigolaev
Ты можешь в onCreate передавать параметры в метод инита вью модели
И в lazy тоже
источник

S

Singular in Android Architecture
что?
источник

Kd

Konstantin dmz9 in Android Architecture
Singular
@Singleton
@Component
interface AppComponent {
   fun getMainViewModel(): MainViewModel
}

@Singleton
class MainViewModel @Inject constructor() : ViewModel() {


//FIRST_ACTIVITIY
@Inject lateinit var viewModel: MainViewModel
override fun onCreate(savedInstanceState: Bundle?) {
       super.onCreate(savedInstanceState)
       viewModel = App.dagger.getMainViewModel()

//TWO_ACTIVITIY
val viewModel:MainViewModel by lazy { App.dagger.getMainViewModel() }


В чем разница между двумя способами инициализации и зачем нужен Dagger, когда можно заюзать как object
у object время жизни будет равно времени жизни всего приложения, точнее пока он в памяти живет этот обжект.
а синглтон созданый через даггер может жить и в более коротком цикле, т.е. он будет синглтон в определенном скоупе пока скоуп не закрыт
источник

Kd

Konstantin dmz9 in Android Architecture
скоуп не обязательно будет равен жизни приложения. это может быть скоуп активити, где живет синглтон, и как только активити сдохла - в следующий раз, будет уже создан другой "синглтон"
источник

D

Dmitry in Android Architecture
Только нужно понимать, что скоуп это просто маркер и за жизненным циклом компонентов должен все равно следить разработчик)
источник

S

Singular in Android Architecture
Konstantin dmz9
у object время жизни будет равно времени жизни всего приложения, точнее пока он в памяти живет этот обжект.
а синглтон созданый через даггер может жить и в более коротком цикле, т.е. он будет синглтон в определенном скоупе пока скоуп не закрыт
А если я инициализировал дагер в Appilcation?
источник

Kd

Konstantin dmz9 in Android Architecture
скорее это временные границы жизни зависимостей (дерева зависимостей или части)
источник

S

Singular in Android Architecture
то разницы нет между ним и обжектом да?
источник

Kd

Konstantin dmz9 in Android Architecture
Singular
А если я инициализировал дагер в Appilcation?
если он хранится в глобальном скопе - да, разницы никакой
источник

D

Dmitry in Android Architecture
Konstantin dmz9
скорее это временные границы жизни зависимостей (дерева зависимостей или части)
Надо запомнить, буду теперь так говорить, Не ЖЦ, а временные границы жизни, поэтично
источник

S

Singular in Android Architecture
Вы там временные границы попутали чтоли?
источник

S

Singular in Android Architecture
Я так терь буду общяться)
источник

D

Dmitry in Android Architecture
😂
источник

AD

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

S

Singular in Android Architecture
А как быть в такой ситуации??
Есть 3 активности, запускаю 1, затем 2 тут я должен создать ViewModel Singletone. в 3 активности тоже создаю ViewModel, а точнее обращяюсь уже к существующей.

Когда закрываю 3 и 2 ативность то Singletone умирает, затем по новой.

Как сделать?
источник

ES

Egor Sigolaev in Android Architecture
Singular
А как быть в такой ситуации??
Есть 3 активности, запускаю 1, затем 2 тут я должен создать ViewModel Singletone. в 3 активности тоже создаю ViewModel, а точнее обращяюсь уже к существующей.

Когда закрываю 3 и 2 ативность то Singletone умирает, затем по новой.

Как сделать?
Свой скоуп же. Синглтон тут не нужен.
источник

S

Singular in Android Architecture
Egor Sigolaev
Свой скоуп же. Синглтон тут не нужен.
покажи код плиз
источник

ES

Egor Sigolaev in Android Architecture
Singular
покажи код плиз
Рядом нет проекта, вот видос https://youtu.be/V-CF0BGA-3w
источник

OP

Oleg Pchelkin in Android Architecture
Singular
@Singleton
@Component
interface AppComponent {
   fun getMainViewModel(): MainViewModel
}

@Singleton
class MainViewModel @Inject constructor() : ViewModel() {


//FIRST_ACTIVITIY
@Inject lateinit var viewModel: MainViewModel
override fun onCreate(savedInstanceState: Bundle?) {
       super.onCreate(savedInstanceState)
       viewModel = App.dagger.getMainViewModel()

//TWO_ACTIVITIY
val viewModel:MainViewModel by lazy { App.dagger.getMainViewModel() }


В чем разница между двумя способами инициализации и зачем нужен Dagger, когда можно заюзать как object
Разница между lazy  и инициализацией в oncreate непонятна или что?
А по поводу объекта - синглтон в даггере не равен синглтону в приложении, только в рамках проинициализированного компонента, если его будешь инитить в каждом активити, то объект будет для каждого активити свой.
источник