在Android从内存中清除应用程序后,使用MvvmCross显示启动画面

时间:2015-01-21 18:26:46

标签: android mvvmcross

以下是我的方案:当我的应用程序被操作系统从内存中清除并从最近的应用程序列表中重新打开时,它会直接进入上次打开的活动。当发生这种情况时,我想初始化几个业务对象。

我实现这一目标的第一种方法是在InitializeLastChance类的Setup方法中进行初始化。 在InitializeLastChance方法中,我检查当前的热门活动是否为MvxSplashScreenActivity。如果不是,我进行必要的初始化。代码是这样的:

protected override void InitializeLastChance()
{           
    try
    {
        var topActivity = Mvx.Resolve<IMvxAndroidCurrentTopActivity>().Activity;
        if (topActivity.LocalClassName != _splashScreenName)
        {
            //Do special initialization
        }
    }
    catch (Exception ex)
    {
        //Log error
    }

    base.InitializeLastChance();
} 

这可以按预期工作,但视觉效果并不是最好的:在初始化发生时,带有应用名称的空白屏幕会出现几秒钟。初始化完成后,将加载上一个打开的活动。

为了避免这个空白屏幕,我想尝试一种不同的方法:在初始化完成时显示一个Activity,类似于启动画面,这样用户就可以得到一些反馈,说明发生了什么。在这种方法中,附加到新Activity的ViewModel将进行我想要的初始化。 为了展示这项新活动,我尝试创建自定义IMvxAppStart并在App课程中注册,但这并没有奏效。我的自定义IMvxAppStart包含以下代码:

public class CustomAppStart
       : MvxNavigatingObject
       , IMvxAppStart
    {
        public void Start(object hint = null)
        {            
            if (hint == null)
            {              
                ShowViewModel<LoginViewModel>();
            }
            else
            {
                ShowViewModel<InitializationViewModel>();
            }
        }
    }

我希望在应用程序从头开始时显示LoginViewModel,并且在应用程序直接进入上次加载的活动的情况下,将显示InitializationViewModel。在后一种情况下,不会调用Start方法。我已经检查了MvvmCross源代码,据我所知,MvxSplashScreenActivity调用了Start方法(如果我错了,请更正我)。重新打开应用并直接转到上次打开的活动时,MvxSplashScreenActivity未被使用,因此CustomAppStart中的Start方法未被调用。

话虽如此,我对CustomAppStart方法有一些疑问:

  1. 这种方法是显示启动画面或&#34;初始化活动的最佳方式吗?在应用程序直接进入上次打开的活动的情况下?
  2. 如何在这些情况下使用CustomAppStart,因为似乎只从MvxSplashScreenActivity调用了Start方法?
  3. 如何将值传递给Start方法中的hint参数?
  4. 由于

0 个答案:

没有答案