Application.OnCreate 被覆盖后启动画面消失

Splash Screen disappeared after Application.OnCreate was overridden

初刊

我需要按照此处 在我的 Application.OnCreate 方法中的描述注册 ProcessLifecycleOwner

但是 MvvmCross6.2.2 版本出现了错误:

MvvmCross.Exceptions.MvxIoCResolveException: Failed to resolve type MvvmCross.ViewModels.IMvxAppStart occurred

或者只是停留在 Splash Screen6.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();
}

但由于并行性,它不可靠,有时有效,有时崩溃。


问题

如何恢复Splash Screen

您的方法很可能在 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();
    }
}