How ViewModels are retained on Config Changes?
Basic Terms
- ViewModelProvider
- ViewModelStore
storage for viewmodel
- ViewModelStoreOwner
interface which contains storage object and is implemented by ComponentActivity etc.
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}
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
See how ViewModelStore is returned on from NonConfigurationInstance if not we create a new instance