Это действительно зависит от вашего варианта использования, но я бы вообще рекомендовал не использовать статические реализации (чтобы включить синглтоны, см. Что такого плохого в синглетах? ).Они становятся трудными для адекватного тестирования с течением времени и могут (вкратце) привести к множеству других проблем в зависимости от реализации.
Если это относительно простой объект, где изменение состояния встречается редко, выполняется только в одном действии за рази / или не имеет значения, реализация Parcelable
и передача этого каждому Activity
через Intent
, вероятно, лучше всего.
Если это сложный объект или объект, который может динамически изменяться, предпочтительнееРешением будет использование платформы внедрения зависимостей (например, Koin, если вы используете Kotlin) для создания экземпляров данных и предоставления их в качестве зависимости.Koin довольно прост, очень простая реализация с веб-сайта Koin (и для ее завершения не хватает всего нескольких строк):
// Injected by constructor
class MyViewModel(val repo : MyRepository) : ViewModel()
// declared ViewModel using the viewModel keyword
val myModule : Module = module {
viewModel { MyViewModel(get()) }
single { MyRepository() }
}
// Just get it
class MyActivity() : AppCompatActivity() {
// lazy inject MyViewModel
val vm : MyViewModel by viewModel()
}
В этом случае ваш объект будет выглядеть как MyRepository()
впример.Вам просто нужно добавить startKoin([list of modules])
оттуда.Если бы вы хотели MyRepository()
в вашем Activity
, вы бы включили его как val myRepo: MyRepository by inject()
.Я не знаю, выходит ли это за рамки вашего проекта, все зависит от того, что именно вы пытаетесь сделать.