How ViewModels are retained on Config Changes?

Basic Terms

  • ViewModelProvider

alt text

  • ViewModelStore

storage for viewmodel

alt text

  • ViewModelStoreOwner

interface which contains storage object and is implemented by ComponentActivity etc.

alt text alt text

Attaching ViewModel to activity

MainActivity.kt

 1class MainActivity : AppCompatActivity() {
 2    @RequiresApi(Build.VERSION_CODES.P)
 3    private lateinit var viewModel: MyViewModel;
 4
 5    @RequiresApi(Build.VERSION_CODES.P)
 6    override fun onCreate(savedInstanceState: Bundle?) {
 7        super.onCreate(savedInstanceState)
 8        enableEdgeToEdge()
 9        setContentView(R.layout.activity_main)
10        
11        viewModel = ViewModelProvider(this)[MyViewModel::class.java]
12       
13    }
14}![alt text](image.png)

Q: Aren’t we getting new viewmodel instance everytime as when configuration is changed onCreate is invoked again ?
No

Let me walk you through code alt text

See how ViewModelStore is returned on from NonConfigurationInstance if not we create a new instance