我需要在ProcessLifecycleOwner
方法中按照此处Xamarin.Android Architecture Components的说明注册Application.OnCreate
。
但是它导致了6.2.2
的{{1}}版本的错误:
MvvmCross
:发生无法解析类型MvvmCross.Exceptions.MvxIoCResolveException
的事件
或者只是用MvvmCross.ViewModels.IMvxAppStart
停留在Splash Screen
上。
这些问题已通过Xamarin.Android mvvmcross app crashes when launching with intent filter的建议得到解决。
6.2.3
但是[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();
}
?
答案 0 :(得分:2)
您的方法很可能会阻塞UI线程,这会导致UI在预期的初始屏幕本应显示的时间内阻塞。
尝试使用异步事件处理程序允许无阻塞的UI调用
[Application]
public class App : MvxAndroidApplication<Setup, Core.App> {
public App(IntPtr reference, JniHandleOwnership transfer) :
base(reference, transfer) {
EnsureInitialized = onEnsureInitialized; //Subscribe to event
}
private event EventHandler EnsureInitialized = delegate { };
private async void onEnsureInitialized(object sender, EventArgs args) {
await Task.Run(() => MvxAndroidSetupSingleton.EnsureSingletonAvailable(ApplicationContext)
.EnsureInitialized());
}
public override void OnCreate() {
EnsureInitialized(this, EventArgs.Empty); //Raise event
base.OnCreate();
}
}