Если ваши данные достаточно малого размера, такие как ваши, используемые во всем приложении, для меня имеет смысл синглтон. Но не синглтон "ViewModel". Класс вашей модели должен быть одноэлементным, а не ViewModel, который содержит лог c работы с данными модели и должен быть ограничен областью действия (и новым экземпляром, созданным для каждой операции).
Ваша одноэлементная модель может быть традиционным одноэлементным или object
с функцией инициализации, которую вы должны вызвать. Это просто предпочтение. Только ваш ViewModel, работающий с синглтоном, должен иметь к нему доступ, поэтому использование шаблона, вероятно, будет примерно одинаковым в любом случае.
Иногда синглетам в Android нужен контекст, например, если вы сохраняете в файлы или база данных. В этом случае приложение должно использоваться для контекста, поэтому вы не можете случайно пропустить действие через барьер View / ViewModel и пропустить его. Вы можете использовать AndroidViewModel, чтобы у вашего ViewModel был экземпляр Application, который он может использовать для извлечения одиночного файла.
SharedPreferences также будет работать, и обычно он не медленный, потому что он хранит данные в памяти и сохраняет их в файл в фоновом режиме. , Но тогда вы делаете ненужную запись файла.