You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Android官方文档显示Activity的onDestroy先于ViewModel的onCleared执行?

关于ViewModel onCleared()与Activity onDestroy()执行顺序的疑问

我通过调试断点确认了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(); // <- 此处触发ViewModel.onCleared()
                    }
                    mReportFullyDrawnExecutor.activityDestroyed();
                }
            }
        });

但我无法理解Android开发者文档中ViewModel的示意图(图1),我认为正确的执行顺序应该如图2所示。请问官方文档为何会采用图1的示意方式?

内容的提问来源于stack exchange,提问作者Minsuk Jang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 08:03:09