xamarin 未从MvxViewModel调用SaveStateToBundle和ReloadFromBundle

pod7payv  于 2023-05-27  发布在  其他
关注(0)|答案(1)|浏览(126)

我们有这个Xamarin表单应用程序。我们正在使用MVVMCross进行DependencyInjection,Navigation等。
我们现在有一个问题,当SaveStateToBundle和ReloadFromBundle被调用时,我们无法解决。当应用程序在android上进入tombstoning进程时,这些方法应该会自动被调用,但这似乎不会发生。
我们通过android开发者选项“不保留活动”模拟了tombstoning,并编写了一个应用程序,用虚拟数据填充列表,直到android必须清理空间并使用mvvmcross对应用程序进行tombstoning
我们在Android项目上使用MVVMCross 8.0.2和MvvmCross。Forms 8.0.2在.NET Standard 2.1上运行viewmodels的项目上,我们使用MVVMCross 8.0.2
我们发现,它不会被调用,通过按键将数据写入Xamarin Essentials首选项并检查,当重新启动应用程序时,键是否具有给定的值。
我们是这样使用它的:

public class LoginViewModel : ViewModelBase, IFirstViewModel
    {
        (...)

        protected override void SaveStateToBundle(IMvxBundle bundle)
        {
            Preferences.Set("testkey", "value");
            base.SaveStateToBundle(bundle);
        }

        protected override void ReloadFromBundle(IMvxBundle state)
        {
            // Returns value of key or the default value "nothing"
            Preferences.Get("testkey", "nothing");
            base.ReloadFromBundle(state);
        }

        (...)
    }

关于应用程序设置:

  • MainActivity扩展了MvxFormsAppCompatActivity<Setup,App,UI.App>
[Activity(
        Label = "Mobit.MES.Client",
        Icon = "@mipmap/icon",
        Theme = "@style/MainTheme",
        ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation | ConfigChanges.UiMode | ConfigChanges.ScreenLayout | ConfigChanges.SmallestScreenSize,
        LaunchMode = LaunchMode.SingleTask)]
    public class MainActivity : MvxFormsAppCompatActivity<Setup, App, UI.App>
    {

        protected override void OnCreate(Bundle bundle)
        {
            (...)

            base.OnCreate(bundle);
        }
(...)
    }
}
  • 从MvxFormsAndroidSetup<App,UI.App>安装
  • 应用程序:
public class App : MvxApplication
  {
  public override void Initialize()
  {
  // Register all Services in this assembly.
  CreatableTypes()
  .EndingWith("Service")
  .AsInterfaces()
  .RegisterAsLazySingleton();

            RegisterIoC();
      
            RegisterCustomAppStart<AppStart>();
        }
}
  • UI.App:
public partial class App : Application
  {
  public App()
  {
  InitializeComponent();
  }

  }
<?xml version="1.0" encoding="utf-8" ?> <Application xmlns="http://xamarin.com/schemas/2014/forms"              xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"              xmlns:controls="clr-namespace:Mobit.MES.Client.UI.Controls">     <Application.Resources>         (...)     </Application.Resources> </Application>
au9on6nz

au9on6nz1#

浏览8.0.2分支。似乎Xamarin.Forms从未实现过这个特定的功能。
要解决这个问题,您必须挂钩到适当的Page生命周期事件并触发ViewModel方法。

相关问题