【问题标题】:MvvmCross ViewModel exception when app returns from background应用程序从后台返回时的 MvvmCross ViewModel 异常
【发布时间】:2016-09-21 07:30:05
【问题描述】:

我正在为我当前的 App 项目使用 Xamarin.Android / Xamarin.iOS 和 MvvmCross。

当我的 android 应用程序移动到后台时,当应用程序再次回到前面时,我得到了异常“无法从定位器 MvxDefaultViewModelLocator 构造和初始化类型的 ViewModel”(附上的屏幕截图)。但这并非每次都会发生。似乎该错误仅在应用程序长时间处于后台模式并且在设备上打开许多其他应用程序时才会发生。这和安卓的内存管理有关系吗?

感谢您的帮助。

编辑: 谢谢您的回答。这是内部异常:

MvvmCross.Plattform.Exceptions.MvxException: 运行 QuestionListViewModel 类型的 viewModel 生命周期时出现问题 --> System.Reflection.TargetInvocationException:已抛出异常 通过调用的目标 --> MvvmCross.Platfrom.Exceptions.MvxException:缺少文本提供程序 - 请在以下位置使用合适的 IMvxTextProvider 初始化 IoC MvvmCross.Localization.MvxLanguageBinder.get_TextProivder()...

所以我正在使用 MvvmCross JsonLocalization 插件。在启动时,我像这样注册我的 textprovider:

TextProviderBuilder builder = new TextProviderBuilder(fileService.LocalizationDirectoryPath);
this.builder.LoadResources(cultureKey.Trim());
Mvx.RegisterSingleton<IMvxTextProvider(builder.TextProvider);
Mvx.RegisterSingleton<IMvxTextProviderBuilder>(builder);

并在我的 ViewModel 类中像这样使用它:

 public string GetText(string key)
 {
    string text = new MvxLanguageBinder(Constants.GeneralNamespace, "shared").GetText(key);

    return text;
 }

所以看起来 Android 内存管理器杀死了 textprovider 单例实例?

【问题讨论】:

  • 您需要检查 InnerException 的内容并在此处发布。
  • 您在哪里配置 IoC 容器?这是否发生在核心项目中 MvxApplication-Class 的 Initialize() 方法中?我希望通过构造函数注入提供 IMvxTextProviderBuilder 构建器的实例。

标签: android xamarin mvvmcross


【解决方案1】:

是的,这与 android 内存管理有关。 如果打开了许多应用程序并且您的应用程序有一段时间没有被使用,android 决定它可以暂时搁置并释放分配的内存。

你检查过你内心的异常吗?可能某些东西在您的 ViewModel 中被重新初始化,它只是不能这样做,因为某些先决条件没有得到满足。您基本上必须确保每个视图/视图模型都独立于其他视图/视图模型。

例如: 您在前一个视图模型中解析了某些内容,并在下一个视图模型中对其进行了处理。由于您以某种方式将其传递过来,因此您可以在第二个视图模型中使用它。但是,如果内存管理决定可以释放您的应用程序的内存,那么当您再次打开它时,它就会丢失。 所以你需要确保你的视图模型要么导航回来,要么以其他方式检索丢失的数据,等等......

通常,ofc MVVMCross 会处理大部分问题,但是如果没有来自您的视图模型的代码,就很难解决问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-20
    • 2011-06-16
    • 1970-01-01
    相关资源
    最近更新 更多