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

Dagger Hilt单例lateinit属性未初始化崩溃排查求助

生产环境lateinit属性未初始化崩溃的可能原因
  • 进程重启导致单例状态丢失:Android系统内存不足时会回收后台进程,用户再次打开APP时系统重建进程,但不会重复执行Splash页面的初始化逻辑。此时Dagger Hilt重建的单例中packageInfoData仍处于未初始化状态,后续调用get方法就会触发异常。这种场景本地难以复现,可通过开发者选项“不保留活动”或模拟内存不足场景测试。
  • 多线程竞态条件:即便确认get调用在set之后,若存在多线程场景——比如SplashViewModel的set操作在后台线程执行,其他线程提前调用get方法——就会出现未初始化问题。本地测试线程调度稳定不易触发,但生产环境设备性能多样,线程执行顺序不可控,容易引发崩溃。
  • Dagger Hilt单例作用域错误:检查PackagesDataSingleton的注解是否为应用级@Singleton。如果误使用@ActivityScoped等局部作用域,对应组件销毁重建时单例会被重新创建,新实例的packageInfoData未初始化,后续调用就会报错。
  • 异常导致set方法未执行:SplashViewModel调用setPackageInfoData前的逻辑若抛出未捕获异常,会导致set方法未执行,packageInfoData保持未初始化状态。这种情况可能因生产环境部分设备的特殊配置(如权限、系统版本)触发,本地未覆盖到相关场景。
  • ProGuard/R8混淆问题:开启混淆后,ProGuard可能误优化lateinit属性的初始化检查,或修改单例初始化逻辑,导致运行时属性未被正确初始化。需检查混淆规则,确保PackagesDataSingleton相关代码不被错误优化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 12:07:02