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


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.
}
});

}
}

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

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

那么ViewModelProviders是如何确定哪个是哪个的呢?

感谢您的反馈!

您可以在ComponentActivity的来源中看到,它在销毁时检查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();
}
}
}
});

最新更新