mvvmcross应用程序单例生命周期

mvvmcross应用程序单例生命周期,mvvmcross,application-lifecycle,Mvvmcross,Application Lifecycle,我在同一个应用程序中有一个服务(前台、粘性)和一个活动(LaunchMode.SingleTask) 有两种mvvmcross设置方案: 服务从启动时启动,mvvmcross使用“setup.EnsureInitialized”方法初始化 服务从活动启动,mvvmcross以“经典”方式初始化 有时,由于内存压力低或意外异常,我的服务被终止或终止 然后我点击我的发射器 10-13 01:05:06.699 497 507 I ActivityManager: START {act=and

我在同一个应用程序中有一个服务(前台、粘性)和一个活动(LaunchMode.SingleTask)

有两种mvvmcross设置方案:

  • 服务从启动时启动,mvvmcross使用“setup.EnsureInitialized”方法初始化
  • 服务从活动启动,mvvmcross以“经典”方式初始化
  • 有时,由于内存压力低或意外异常,我的服务被终止或终止

    然后我点击我的发射器

    10-13 01:05:06.699   497   507 I ActivityManager: START {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=LoneWorker.Client.Android.App/loneworker.client.android.app.TrialSplashScreen bnds=[240,223][360,379] u=0} from pid 11747
    10-13 01:05:06.769   497  7269 I ActivityManager: Start proc LoneWorker.Client.Android.App for activity LoneWorker.Client.Android.App/loneworker.clientandroid.app.views.HomeView: pid=11980 uid=10081 gids={3003, 1015, 1023, 1028}
    
    但是,启动屏幕看起来不像是正常的应用程序启动,应用程序会立即失败

    10-13 01:05:07.959 11980 11980 I MonoDroid: UNHANDLED EXCEPTION:
    10-13 01:05:07.969 11980 11980 I MonoDroid: System.NullReferenceException: Object reference not set to an instance of an object
    10-13 01:05:07.969 11980 11980 I MonoDroid: at Cirrious.CrossCore.Mvx.Resolve<Cirrious.MvvmCross.Plugins.Messenger.IMvxMessenger> () <0x00038>
    10-13 01:05:07.969 11980 11980 I MonoDroid: at LoneWorker.ClientAndroid.App.Views.HomeView..ctor () <0x0002f>
    10-13 01:05:07.969 11980 11980 I MonoDroid: at (wrapper dynamic-method) object.ee0d83da-1657-4884-bf34-4fc266ad42f0 (intptr,object[]) <0x0003f>
    10-13 01:05:07.969 11980 11980 I MonoDroid: at Java.Interop.TypeManager.n_Activate (intptr,intptr,intptr,intptr,intptr,intptr) <0x00283>
    10-13 01:05:07.969 11980 11980 I MonoDroid: at (wrapper dynamic-method) object.2fd07179-5f93-420a-8653-1fbe1c8a2f2e (intptr,intptr,intptr,intptr,intptr,intptr) <0x0006b>
    
    10-13 01:05:07.959 11980 11980 I单机器人:未处理的异常:
    10-13 01:05:07.969 11980 11980 I MonoDroid:System.NullReferenceException:对象引用未设置为对象的实例
    10-13 01:05:07.969 11980 11980 I单机器人:在cirrium.CrossCore.Mvx.Resolve()
    10-13 01:05:07.969 11980 11980 I单机器人:在LoneWorker.ClientAndroid.App.Views.HomeView..ctor()
    10-13 01:05:07.969 11980 11980 I单机器人:at(包装器动态方法)对象。ee0d83da-1657-4884-bf34-4fc266ad42f0(intptr,对象[])
    10-13 01:05:07.969 11980 11980 I MonoDroid:at Java.Interop.TypeManager.n_激活(intptr,intptr,intptr,intptr,intptr,intptr,intptr)
    10-13 01:05:07.969 11980 11980 I单机器人:at(包装器动态方法)对象。2fd07179-5f93-420a-8653-1fbe1c8a2f2e(intptr,intptr,intptr,intptr,intptr,intptr,intptr)
    
    在日志中,我只有一个异常,因为Mvx容器无法解析messenger。 =>由于安装过程未启动,因此无法解决此问题。 它的行为就像应用程序已经初始化

    那么,以前崩溃的服务中的前一个应用程序singleton是否还在运行

    我可以强制应用程序重新初始化吗


    我对这种奇怪的行为感到有点困惑…

    堆栈跟踪显示您的应用程序是在一个“新”过程中创建的,但是通过
    HomeView启动的

    然后,代码在其构造函数中调用
    Mvx.Resolve

    10-13 01:05:07.969 11980 11980 I MonoDroid: at Cirrious.CrossCore.Mvx.Resolve<Cirrious.MvvmCross.Plugins.Messenger.IMvxMessenger> () <0x00038>
    10-13 01:05:07.969 11980 11980 I MonoDroid: at LoneWorker.ClientAndroid.App.Views.HomeView..ctor () <0x0002f>
    
    10-13 01:05:07.969 11980 11980 I单机器人:在cirrial.CrossCore.Mvx.Resolve()
    10-13 01:05:07.969 11980 11980 I单机器人:在LoneWorker.ClientAndroid.App.Views.HomeView..ctor()
    
    该异常随后在内部产生:

        public static object Resolve(Type serviceType)
        {
            var ioc = MvxSingleton<IMvxIoCProvider>.Instance;
            return ioc.Resolve(serviceType);
        }
    
    公共静态对象解析(类型serviceType)
    {
    var ioc=MvxSingleton.Instance;
    返回ioc.Resolve(serviceType);
    }
    
    这是因为
    MvxSingleton.Instance
    为空()

    由于Android的生命周期,MvvmCross不会在构建视图的过程中检查安装是否完成,而是在
    OnCreate
    方法中检查

    我建议您将代码从视图构造函数中移到
    OnCreate
    ——在
    base.OnCreate
    调用之后的某个地方

    请注意,在这些情况下-如果您在创建活动/视图期间在UI线程上运行
    Setup
    ,则UI可能会向用户显示为“暂停”。

    !就是这样:)。然而,它有一点奇怪:当应用程序在崩溃后重新启动时,它不会通过启动屏幕,而是直接进入崩溃前的最后一个视图。。。。