ViewModel
ViewModel необходим для сохранения состояния данных. Например
Строчка
viewModel = ViewModelProvider(this).get(MainViewModel::class.java)
возвращает ссылку на вьюмодель если она была ранее создано. Несмотря на то что активити будет пересоздаваться - вьюмодель будет одна. Типа синглтон в рамках жизненного цикла активити.
Если этого не создавать, то вьюмодель будет уничтожаться и солздаваться каждый раз когда, например переворачиваем экран.
Пример:
Инициализируем private lateinit var viewModel: MainViewModel
Присваиваем viewModel = ViewModelProvider(this).get(MainViewModel::class.java)