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