Передача данных между действиями. Kotlin Синглтон с параметрами? Другие вопросы - PullRequest
0 голосов
/ 05 марта 2020

Список / набор из 5-200 объектов (в зависимости от пользователя приложения) с пятью 40-символьными String переменными должен быть общим для операций.

ViewModels хороши для передачи данных между фрагментами, но, похоже, это не очень хорош для передачи данных между Деятельностями, так как жизненный цикл ViewModel ограничен жизненным циклом одного действия.

Вопрос 1 : Возможно ли сделать все приложение вместо одного Действия - ViewModelStoreOwner? Если да, то как? Вы бы предложили ViewModelSingleton?

Вопрос 2: Как насчет использования обычного синглтона вместо этого? Каковы плюсы и минусы по сравнению с ViewModel и ViewModelSingleton? Есть ли вероятность, что синглтон будет отправлен сборщику мусора и данные будут потеряны?

Вопрос 3: object в Kotlin определяет потокобезопасный, ленивый экземпляр синглтона, который является удивительным, но невозможно передать параметры напрямую. Существуют различные методы для передачи параметров. Какой метод вы предлагаете и почему?

Вопрос 4: Использование sharedPreferences для передачи данных также возможно, но кажется медленным. Любой быстрый, надежный и гибкий способ, который вы бы предложили, кроме методов, упомянутых до сих пор?

Спасибо.

1 Ответ

0 голосов
/ 05 марта 2020

Если ваши данные достаточно малого размера, такие как ваши, используемые во всем приложении, для меня имеет смысл синглтон. Но не синглтон "ViewModel". Класс вашей модели должен быть одноэлементным, а не ViewModel, который содержит лог c работы с данными модели и должен быть ограничен областью действия (и новым экземпляром, созданным для каждой операции).

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

Иногда синглетам в Android нужен контекст, например, если вы сохраняете в файлы или база данных. В этом случае приложение должно использоваться для контекста, поэтому вы не можете случайно пропустить действие через барьер View / ViewModel и пропустить его. Вы можете использовать AndroidViewModel, чтобы у вашего ViewModel был экземпляр Application, который он может использовать для извлечения одиночного файла.

SharedPreferences также будет работать, и обычно он не медленный, потому что он хранит данные в памяти и сохраняет их в файл в фоновом режиме. , Но тогда вы делаете ненужную запись файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...