【发布时间】:2019-03-03 18:10:23
【问题描述】:
初始问题
我需要在我的Application.OnCreate 方法中注册ProcessLifecycleOwner,如此处Xamarin.Android Architecture Components 所述。
但它导致了6.2.2 版本的MvvmCross 的错误:
MvvmCross.Exceptions.MvxIoCResolveException:发生MvvmCross.ViewModels.IMvxAppStart类型解析失败
或者只是停留在Splash Screen 和6.2.3。
修复
Xamarin.Android mvvmcross app crashes when launching with intent filter 的建议解决了这些问题。
[Application]
public class App : MvxAndroidApplication<Setup, Core.App>
{
public App(IntPtr reference, JniHandleOwnership transfer) :
base(reference, transfer) { }
public override void OnCreate()
{
MvxAndroidSetupSingleton
.EnsureSingletonAvailable(ApplicationContext)
.EnsureInitialized();
base.OnCreate();
}
}
当前问题
然而Splash Screen也消失了,只剩下default theme的蓝色背景。
我找到的解决方法:
public override void OnCreate()
{
Task.Run(() => MvxAndroidSetupSingleton
.EnsureSingletonAvailable(ApplicationContext)
.EnsureInitialized());
base.OnCreate();
}
但由于并行性,它不可靠,有时有效,有时崩溃。
问题
Splash Screen如何恢复?
【问题讨论】:
-
首先,我不建议您使用
Task,Run(()=>MvxAndroidSetupSingleton)..,MvxAndroidSetupSingleton 可以用来确保框架随时启动并运行,它可能会阻塞您的 UI。如果你使用Task.Run(),你打开一个子线程然后运行MvxAndroidSetupSingleton..,你可以使用Task.Wait()卡在主线程上等待任务完成。 -
谢谢,但是如果您不推荐使用
MvxAndroidSetupSingleton,您能解释一下使用什么吗?此外,还为解决方法块UI中的任务添加对.Wait()的调用。
标签: xamarin.android mvvmcross oncreate