我们有这个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>
1条答案
按热度按时间au9on6nz1#
浏览8.0.2分支。似乎Xamarin.Forms从未实现过这个特定的功能。
要解决这个问题,您必须挂钩到适当的Page生命周期事件并触发ViewModel方法。