Activity在onDestroy会尝试对ViewModelStore清空。如果是由于ConfigurationChanged带来的Destroy则不进行清空,避免横竖屏切换等造成ViewModel销毁。
具体:
Activity首次启动
-
FragmentActivity#onCreate()被调用
-
此时 FragmentActivity 的 mViewModelStore 尚为 null
-
-
HogeActivity的onCreate() 被调用
-
ViewModelProvider 实例创建
-
FragmentActivity#getViewModelStore() 被调用,mViewModelStore被创建并赋值
-
发生屏幕旋转
-
FragmentActivity#onRetainNonConfigurationInstance() 被调用
-
持有mViewModelStore 的NonConfigurationInstances 实例被返回
-
Activity重建
-
FragmentActivity#onCreate() 被调用
-
从Activity#getLastNonConfigurationInstance() 获取 NonConfigurationInstances 实例
-
NonConfigurationInstances 中保存了屏幕旋转前的 FragmentActivity 的 mViewModelStore,将其赋值给重建后的FragmentActivity 的 mViewModelStore
-
-
HogeActivity#onCreate() 被调用
-
通过ViewModelProvider#get() 获取 ViewModel 实例
-