Xamarin.Forms 应用程序属性未在 Android 的会话之间保存

Xamarin.Forms application properties not saved between sessions with Android

在我的跨平台应用程序中,我按以下方式保存应用程序属性:

Application.Current.Properties["myValue"] = "Test";
await Application.Current.SavePropertiesAsync();

我稍后会像这样检索它们:

string myVal = Application.Current.Properties["myValue"];

这在使用 Android 模拟器时效果很好。我可以关闭模​​拟器,当我再次重启时,我的应用程序数据会被保留。

但是,当我将此应用程序部署到物理 Android 设备时,数据保存会按预期工作,直到我关闭该应用程序并再次打开它。此时我检索到一个空值。好像数据只保存到内存(而不是文件)。

此外,完全相同的应用程序的 iOS 版本可以完美运行。当我打开应用程序时,所有以前的值都已保存,我可以检索它们。

我在 Android 版本上做错了什么?当实际部署到 phone 时,是否需要启用 Android 设置、权限或选项,以便在应用程序会话之间保存值?

在 VS 中您需要启用选项:

Preserve application data/cache on device between deploys

您可以在“工具”>“选项”>“Xamarin”>“Android 设置”中找到它。

我不知道这是否已在 Xamarin Forms 的最新更新中停止,数据可用直到应用程序 运行 类似于会话但持久存储不起作用。

我认为最好的 api Akavache https://github.com/akavache/Akavache

您可以阅读此博客 https://codemilltech.com/akavache-is-aka-awesome/

更新 在 bugzilla 中提交了一个错误: https://bugzilla.xamarin.com/show_bug.cgi?id=26444

我有一个类似的问题,只有调试版本保存了属性。我认为我们仍在等待错误修复,这是解决方法 on Xamarin Forms bugzilla

简而言之:转到.Droid project settings -> Android Options -> Linker
和 enter/add "System.Runtime.Serialization" 跳过链接程序集。

我不记得到底是哪一部分解决了问题,但是当我按照说明从头到尾准备 Android 申请发布时,问题就消失了。在 Android 设备上使用调试版本时出现问题。

https://developer.xamarin.com/guides/android/deployment,_testing,_and_metrics/publishing_an_application/part_1_-_preparing_an_application_for_release/

link 详细介绍了 Android 项目发布到设备时的建议设置。按照这些说明应该可以解决问题。

哇!经过大量研究,我得到了针对我的相同问题的解决方案。问题是,当我将 List 或 DataTable 存储在 Application.Current.Properties 中时,所有属性在重新打开应用程序后都会被删除,但如果我将 List 或 DataTable 存储为序列化,它工作正常。