ViewModelProviders 如何知道何时发生配置更改 VS 用户显式创建新的 activity?

How does ViewModelProviders know when there is a configuration change VS user explicitly creates a new activity?

public class MainActivity extends Activity {
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
         
         MyViewModel viewModel = ViewModelProviders.of(this).get(MyViewModel.class);
         
         viewModel.getUsers().observer(this, new Observer() {
            @Override
             public void onChanged(@Nullable User data) {
                 // update the ui.
             }
         });
        
     }
}

例如,如果我在上面创建这个 activity 并旋转屏幕,我假设 MyViewModel 将被保留。但是当我完成 activity 并创建一个新的时,我应该看到一个全新的 activity 和新的 MyViewModel .

根据我的理解,配置更改将启动相同的回调(onPause,onStop,onDestroy 然后 onCreate,onStart,onResume),这似乎与用户完成 activity 并再次手动创建它相同.

那么ViewModelProvider是如何判断哪个是哪个的呢?

欢迎任何反馈!

销毁后source of ComponentActivity that it checks isChangingConfigurations()可以看到:

// listener registered in constructor
getLifecycle().addObserver(new LifecycleEventObserver() {
    @Override
    public void onStateChanged(@NonNull LifecycleOwner source,
            @NonNull Lifecycle.Event event) {
        if (event == Lifecycle.Event.ON_DESTROY) {
            // Clear out the available context
            mContextAwareHelper.clearAvailableContext();
            // And clear the ViewModelStore
            if (!isChangingConfigurations()) {
                getViewModelStore().clear();
            }
        }
    }
});