MvvmCross升级至8.x版本后应用卡在SplashScreen启动页如何解决
问题原因&解决思路
- 自定义导航服务初始化逻辑错误
你重写的InitializeNavigationService方法完全跳过了基类实现,且存在两处错误:- 不需要手动注册
IMvxViewModelLoader和ViewDispatcher,这两个实例基类会自动完成注册,重复/错误注册会导致IoC容器冲突 - 你的自定义
DeepNavigationService构造第一个参数传入了null,MvvmCross 8.x的导航服务要求传入有效的IMvxIoCProvider实例,你直接传空会导致导航服务初始化失败,无法执行启动路由
修正后的InitializeNavigationService参考:
protected override IMvxNavigationService InitializeNavigationService(IMvxIoCProvider iocProvider) { // 先调用基类基础初始化 base.InitializeNavigationService(iocProvider); var loader = CreateViewModelLoader(iocProvider); var dispatcher = CreateViewDispatcher(); // 构造时传入iocProvider而不是null var navigationService = new DeepNavigationService(iocProvider, loader, dispatcher, iocProvider); Mvx.IoCProvider.RegisterSingleton<IMvxNavigationService>(navigationService); return navigationService; } - 不需要手动注册
- 自定义AppStart注册顺序错误
确认App.Initialize方法中,RegisterCustomAppStart<AppStart>()是在所有依赖服务(包括StartupViewModel依赖的所有服务)注册完成后再调用,如果服务未注册就触发导航,会导致IoC解析失败卡住启动流程。 - 查看日志排查具体错误
你已经配置了Serilog日志,将最低日志级别调整为Verbose,运行应用后查看Debug输出的日志,定位具体的异常信息:大概率是IoC解析失败、服务依赖缺失、导航服务初始化异常三类问题,日志会明确给出错误的类和原因。 - 检查SplashScreen实现
确认Android端的SplashActivity继承自MvxSplashScreenAppCompatActivity,且OnCreate方法中正确调用了基类方法,没有自定义逻辑阻塞MvvmCross的初始化流程。
内容的提问来源于stack exchange,提问作者toledo1366
相关产品推荐
相关产品推荐

