由于一些多任务处理问题,我的应用程序被 Android 杀死后,我可以看到我的一项活动MyActivity
:MvxDialogActivity
当应用程序尝试重新创建它时崩溃。
也就是说,在将我的应用程序移至后台并开始在其他应用程序之间切换之前一切正常,直到控制台(DDMS)上出现下一条消息:
I/ActivityManager( 333): No longer want com.my.app (pid 4444): hidden #22
重新打开应用程序时,它会尝试重新创建其活动,因此其中一个活动会因下一个堆栈跟踪而崩溃:
UNHANDLED EXCEPTION: System.NullReferenceException: Object reference not set to an instance of an object
at Cirrious.CrossCore.Mvx.Resolve<Cirrious.MvvmCross.Binding.BindingContext.IMvxBindingContextStack`1<Cirrious.MvvmCross.Binding.Droid.BindingContext.IMvxAndroidBindingContext>> () <0x00038>
at Cirrious.MvvmCross.Binding.BindingContext.MvxBindingContextStackRegistration`1<Cirrious.MvvmCross.Binding.Droid.BindingContext.IMvxAndroidBindingContext>.get_Stack () <0x0001f>
at Cirrious.MvvmCross.Binding.BindingContext.MvxBindingContextStackRegistration`1<Cirrious.MvvmCross.Binding.Droid.BindingContext.IMvxAndroidBindingContext>..ctor (Cirrious.MvvmCross.Binding.Droid.BindingContext.IMvxAndroidBindingContext) <0x00017>
at Cirrious.MvvmCross.Binding.Droid.BindingContext.MvxAndroidBindingContext.CommonInflate (int,Android.Views.ViewGroup,Cirrious.MvvmCross.Binding.Droid.Binders.MvxBindingLayoutInflatorFactory) <0x0004b>
at Cirrious.MvvmCross.Binding.Droid.BindingContext.MvxAndroidBindingContext.BindingInflate (int,Android.Views.ViewGroup) <0x0004f>
at Cirrious.MvvmCross.Binding.Droid.BindingContext.MvxBindingContextOwnerExtensions.BindingInflate (Cirrious.MvvmCross.Binding.BindingContext.IMvxBindingContextOwner,int,Android.Views.ViewGroup) <0x000c7>
at Cirrious.MvvmCross.Dialog.Droid.Views.MvxDialogActivity.SetContentView (int) <0x0001f>
at Droid.UI.Impl.MyActivity.OnCreate (Android.OS.Bundle) <0x0008f>
我认为这是由于我在项目中设置 MvvmCross 时犯的一些错误造成的。
这次崩溃还有其他原因吗?你们中的一些人可以指导我如何解决这个崩溃问题吗?
下面是我的Setup.cs
文件:
public class Setup : MvxAndroidDialogSetup
{
public Setup (Context applicationContext)
: base (applicationContext)
{
}
protected override IMvxApplication CreateApp ()
{
return new MvvmCrossApplication ();
}
}
public class MvvmCrossApplication : MvxApplication
{
public override void Initialize ()
{
RegisterAppStart<ApplicationViewModel>();
}
}
看来,当 Android 重新创建我的应用程序时,它会MyActivity
在初始 MvvmCross 设置完成之前实例化一个新实例。可能是因为当 App 被杀死时,存在同一个类的有效实例。有可能发生吗?
这是我的MyActivity
班级在屏幕上呈现的屏幕截图:
它是一个 MvxDialogActivity,它具有:
- 一个动作栏;
- 自定义布局(包含自定义 ListView 和下一个 id:
android:id="@android:id/list"
);和 - 根元素会根据其 ViewModel 更新而相应更新。