As previously mentioned, the ViewModel is scoped to an Activity or Fragment, and must live as long as the scope is still alive. Therefore, we must not instantiate it during the onCreate , for example, as it might get called multiple times in the same activity, and would cause the unnecessary recreation of the ViewModel, losing its data and states. This issue is solved by the Architecture Components with the ViewModelProviders , which does the job of keeping the ViewModel alive and paired with the scope: