我有一个服务(前景,粘性)和一个活动(LaunchMode.SingleTask)在同一个应用程序。
有2种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>在日志中,我有一个例外,因为信使不能被Mvx容器解析。=>不能简单地解决它,因为安装过程没有启动。它的行为就像应用程序已经初始化了..。
那么,来自上一次崩溃服务的上一个应用程序单例是否还在某个地方运行呢?
我能强迫应用程序重新初始化吗?
我被这种奇怪的行为弄糊涂了.
发布于 2014-10-13 06:54:55
堆栈跟踪显示您的应用程序是在一个“新”进程中创建的,但它是通过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>然后在以下内部引发异常:
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可能会对用户“暂停”。
https://stackoverflow.com/questions/26331157
复制相似问题