为什么Android Developer文档说明Activity的onDestroy是在ViewModel的onCleared之前调用的?

问题描述 投票:0回答:1

我使用调试点来找出

ViewModel
的 onCleared 和 Activity 的
onDestroy()
的顺序。 因为
ComponentActivity
类具有以下代码,所以我知道
ViewModel
onCleared()
被调用,然后 Activity 的
onDestroy()
回调。

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(); <- check
                    }
                    mReportFullyDrawnExecutor.activityDestroyed();
                }
            }
        });

我不明白 Android 开发者文档中的

ViewModel
图表说明 图 1链接

我认为更改 Activity 的

onDestroy()
ViewModel
onCleared()
的顺序,如 图 2

为什么图解是这样图1

android viewmodel android-lifecycle
1个回答
0
投票

首先要了解的是 销毁 Android Activity 与销毁对象实例不同。

活动实例仍然存在,它现在处于无法用它做任何更有用的事情的状态。

该观察者在调用

onDestroy
时被调用,因此该图是正确的,因为
Activity.onDestroy()
是在 before
ViewModel.onCleared()

调用的

显示

ViewModel.onCleared()
是在
Activity.onDestroy()

的上下文中调用可能更正确

该图试图表达的观点是:如果您有一个生命周期感知的视图模型观察者,

onDestroy()
将使其在视图模型被清除之前正确退出。

mReportFullyDrawnExecutor
是一个帮助器,通知应用程序的其他部分活动绘制操作已完成,显然需要通知它所关注的活动已被销毁。 这只是一个通知;可以肯定地说
onDestroy()
的大部分工作此时已经完成。

© www.soinside.com 2019 - 2024. All rights reserved.