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

使用Hilt获取Bundle时遇SAVED_STATE_REGISTRY_OWNER_KEY缺失错误

问题:调用BizBundle打开SceneDetailActivity时触发CreationExtras must have a value by SAVED_STATE_REGISTRY_OWNER_KEY错误

问题描述

通过Hilt获取Bundle,调用BizBundle打开SceneDetailActivity时触发错误:CreationExtras must have a value by SAVED_STATE_REGISTRY_OWNER_KEY,已添加相关依赖但问题未解决。

Gradle依赖配置

implementation "androidx.navigation:navigation-compose:2.7.0"
implementation 'androidx.fragment:fragment-ktx:1.6.1'
implementation 'androidx.activity:activity-compose:1.7.2'
implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.6.1"

implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1'
implementation 'androidx.savedstate:savedstate:1.2.1'
implementation 'androidx.lifecycle:lifecycle-common:2.6.1'
implementation 'androidx.activity:activity-ktx:1.7.2'

完整报错堆栈

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.smartlife.ninovas, PID: 8861
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.smartlife.ninovas/com.thingclips.smart.scene.construct.detail.SceneDetailActivity}: java.lang.IllegalArgumentException: CreationExtras must have a value by `SAVED_STATE_REGISTRY_OWNER_KEY`
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3431)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3595)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7664)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
Caused by: java.lang.IllegalArgumentException: CreationExtras must have a value by `SAVED_STATE_REGISTRY_OWNER_KEY`
at androidx.lifecycle.SavedStateHandleSupport.createSavedStateHandle(SavedStateHandleSupport.kt:91)
at androidx.lifecycle.AbstractSavedStateViewModelFactory.create(AbstractSavedStateViewModelFactory.kt:90)
at dagger.hilt.android.internal.lifecycle.HiltViewModelFactory.create(HiltViewModelFactory.java:116)
at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.kt:187)
at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.kt:153)
at androidx.lifecycle.ViewModelLazy.getValue(ViewModelLazy.kt:53)
at com.thingclips.smart.scene.construct.detail.SceneDetailViewModelFactoryKt.createViewModel(SceneDetailViewModelFactory.kt:14)
at com.thingclips.smart.scene.construct.detail.SceneDetailActivity.onCreate(SceneDetailActivity.kt:184)
at android.app.Activity.performCreate(Activity.java:8023)
at android.app.Activity.performCreate(Activity.java:8007)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3404)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3595) 
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85) 
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066) 
at android.os.Handler.dispatchMessage(Handler.java:106) 
at android.os.Looper.loop(Looper.java:223) 
at android.app.ActivityThread.main(ActivityThread.java:7664) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) 

调用代码

IThingSceneBusinessService iThingSceneBusinessService = MicroContext.findServiceByInterface(IThingSceneBusinessService.class.getName());
if(null != iThingSceneBusinessService && HomeModel.getHomeID() != 0) {
    iThingSceneBusinessService.addSceneBean(MainPage.this, HomeModel.getHomeID(), 1234);
}

解决方案

  • 检查Activity继承关系:确保SceneDetailActivity继承自AppCompatActivity或ComponentActivity(这两个类实现了SavedStateRegistryOwner接口,是SavedStateHandle必需的)。如果该Activity是第三方SDK提供的,可尝试升级SDK版本,或者确认启动时传递的上下文是否正确。
  • 验证Hilt配置:
    • 应用的Application类必须添加@HiltAndroidApp注解;
    • SceneDetailActivity必须添加@AndroidEntryPoint注解,确保Hilt能正确注入ViewModel所需的依赖。
  • 确认启动上下文:调用addSceneBean时传递的MainPage.this是Activity实例,而非Application Context,因为Application不实现SavedStateRegistryOwner,无法提供所需的SavedStateRegistry。
  • 统一依赖版本:检查项目中是否存在不同版本的lifecycle、savedstate相关库,使用统一版本避免冲突。比如将所有lifecycle相关依赖统一为同一版本(如2.6.1)。
  • 检查ViewModel创建方式:确保SceneDetailViewModel添加了@HiltViewModel注解,且通过正确的方式获取ViewModel(如by viewModels()),而非自定义工厂导致的初始化错误。

内容的提问来源于stack exchange,提问作者Eko Freshh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 20:42:17