首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mvvmcross应用程序单生命周期

mvvmcross应用程序单生命周期
EN

Stack Overflow用户
提问于 2014-10-12 23:43:19
回答 1查看 977关注 0票数 0

我有一个服务(前景,粘性)和一个活动(LaunchMode.SingleTask)在同一个应用程序。

有2种mvvmcross设置方案:

  1. 服务从引导开始,mvvmcross则使用'setup.EnsureInitialized‘方法初始化。
  2. 服务是从活动启动的,mvvmcross是以“经典”方式初始化的。

有时,由于内存压力低,或意外异常,我的服务被杀死或死亡。

我敲我的发射器,

代码语言:javascript
复制
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}

但是,启动屏幕并不像正常的应用程序启动,应用程序马上就会失败。

代码语言:javascript
复制
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>

在日志中,我有一个例外,因为信使不能被Mvx容器解析。=>不能简单地解决它,因为安装过程没有启动。它的行为就像应用程序已经初始化了..。

那么,来自上一次崩溃服务的上一个应用程序单例是否还在某个地方运行呢?

我能强迫应用程序重新初始化吗?

我被这种奇怪的行为弄糊涂了.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-13 06:54:55

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

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

代码语言:javascript
复制
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>

然后在以下内部引发异常:

代码语言:javascript
复制
    public static object Resolve(Type serviceType)
    {
        var ioc = MvxSingleton<IMvxIoCProvider>.Instance;
        return ioc.Resolve(serviceType);
    }

这将是因为MvxSingleton<IMvxIoCProvider>.Instance为null (https://github.com/MvvmCross/MvvmCross/blob/3.2/CrossCore/Cirrious.CrossCore/Mvx.cs#L36)

由于Android的生命周期,MvvmCross不检查设置是否在构建视图期间完成,而是在OnCreate方法期间完成。

我建议您将代码移出视图构造函数,进入OnCreate --在base.OnCreate调用之后的某个地方。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26331157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档