以下是我的方案:当我的应用程序被操作系统从内存中清除并从最近的应用程序列表中重新打开时,它会直接进入上次打开的活动。当发生这种情况时,我想初始化几个业务对象。
我实现这一目标的第一种方法是在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
方法有一些疑问:
CustomAppStart
,因为似乎只从MvxSplashScreenActivity
调用了Start方法?由于