启动应用程序覆盖后,启动画面消失

时间:2019-03-03 18:10:23

标签: xamarin.android mvvmcross oncreate

初始问题

我需要在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(); }

1 个答案:

答案 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();
    }
}