恢复MvxDialogActivity时出现NullReferenceException

时间:2013-11-06 00:46:35

标签: dialog xamarin.android mvvmcross

由于某些多任务问题导致我的应用程序被Android杀死后,我可以看到我的一个活动MyActivityMvxDialogActivity在应用程序尝试重新创建时崩溃。

也就是说,在将我的应用程序移动到后台并开始在其他应用程序之间切换,直到控制台上显示下一条消息(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正在重新创建我的App时,它会在初始MvvmCross设置完成之前实例化一个新的MyActivity实例。也许是因为当App被杀死时,有一个同一类的有效实例。是否有可能发生?

这是我的MyActivity课程在屏幕上显示的屏幕截图:

MyActivity custom layout

这是一个MvxDialogActivity,它有:

  • 动作栏;
  • 自定义布局(包含具有下一个ID的自定义ListView:android:id="@android:id/list");和
  • 根据其ViewModel更新而更新的Root元素。

1 个答案:

答案 0 :(得分:0)

从调用堆栈看起来MyActivity.OnCreate正在调用SetContentView

基于Android.Dialog的活动SetContentView实施期间调用OnCreate

这些对话视图的一些示例如下: