我很好奇当Activity因旋转而被销毁并重新创建时,ViewModel是如何存活下来的。从逻辑上看,如果创建ViewModel的Activity被销毁,那么ViewModel也会被销毁。而旋转设备时,Activity会被销毁。
ViewModel如何知道Activity已经完全结束,以便我可以销毁自己呢?因为如果设备旋转,onDestroy方法也会被调用多次。因此,当Activity完全销毁时,ViewModel的onCleared方法如何被触发?
我很好奇当Activity因旋转而被销毁并重新创建时,ViewModel是如何存活下来的。从逻辑上看,如果创建ViewModel的Activity被销毁,那么ViewModel也会被销毁。而旋转设备时,Activity会被销毁。
ViewModel如何知道Activity已经完全结束,以便我可以销毁自己呢?因为如果设备旋转,onDestroy方法也会被调用多次。因此,当Activity完全销毁时,ViewModel的onCleared方法如何被触发?
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();
}
}
}
});
ViewModel是生命周期感知的,这意味着当您创建ViewModel时,需要将LifecycleOwner传递给VM。这有助于View Model获取上下文的状态(无论是活动、片段等等)。
只有在状态处于活动状态时,View Model才能向其观察者广播更改。
请参考以下链接以获得更多清晰度:
https://developer.android.com/topic/libraries/architecture/lifecycle#lco https://codelabs.developers.google.com/codelabs/android-lifecycles/#4