Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MVVMXamarin表单,最适合在函数等待服务调用的几分钟响应时将其保存在内存中_Xamarin_Mobile_Mvvm_Xamarin.forms - Fatal编程技术网

MVVMXamarin表单,最适合在函数等待服务调用的几分钟响应时将其保存在内存中

MVVMXamarin表单,最适合在函数等待服务调用的几分钟响应时将其保存在内存中,xamarin,mobile,mvvm,xamarin.forms,Xamarin,Mobile,Mvvm,Xamarin.forms,情景: 我接到一个WCF服务的电话,需要几分钟才能得到回复 最初,调用是通过视图模型上的操作进行的,该操作随后将对象的更新版本保存到存储库中,然后存储库将对象传递到服务层,以发送到web服务中 一旦完成,服务层会将响应返回到存储库,然后返回到视图模型,该视图模型会向用户发出一个对话框,给他们一系列选项 问题: 用户可以在等待时转到应用程序中的其他视图,这将破坏视图模型,用户将不会收到提醒他们的消息 因此,我需要将从存储库接收响应的函数保存在内存中,直到其完成 为了解决这个问题,我将对话和函数移到

情景:

我接到一个WCF服务的电话,需要几分钟才能得到回复

最初,调用是通过视图模型上的操作进行的,该操作随后将对象的更新版本保存到存储库中,然后存储库将对象传递到服务层,以发送到web服务中

一旦完成,服务层会将响应返回到存储库,然后返回到视图模型,该视图模型会向用户发出一个对话框,给他们一系列选项

问题:

用户可以在等待时转到应用程序中的其他视图,这将破坏视图模型,用户将不会收到提醒他们的消息

因此,我需要将从存储库接收响应的函数保存在内存中,直到其完成

为了解决这个问题,我将对话和函数移到了存储库中,因为这是一个单独的组件,因此将保留在内存中,但这会挫败单独的责任,因为存储库只应负责提供数据,而不应执行业务逻辑

我已经研究过通过消息中心提出这个问题,但我相信这将在内存中保留ViewModel,用户可以多次发出此请求,从而在每次请求时调用消息中心

是否有人有处理此场景的最佳实践或他们可以向我提供的任何文档


提前感谢您的帮助:)

在这种情况下,您应该查看后台任务。它超出了移动应用程序的生命周期。若你们的过程需要几分钟,那个么几乎不可能在应用程序本身上进行中继,因为用户可以随时终止它或让它进入睡眠状态,而你们也无法阻止它

很好的问题,等待有人给这个问题一个好的答案。你有没有考虑过一个单例服务(我看到它在这个用例中经常被称为服务),当从VM发起请求时,它通过适当的层发出请求,当它得到响应时,它会向消息中心发送消息?然后,负责显示对话框的VM可以订阅此消息。此订阅很弱,将允许您的VM被销毁。但我不确定您的UX设计是否合适。本地通知可能更好。然后,此通知可以将它们链接到相关视图,以查看有关结果的更多信息,并在必要时采取任何其他操作。这种方法还可以让他们完全退出应用程序,但仍然会收到通知(当然,在防止应用程序被操作系统杀死方面需要做更多的工作),从理论上讲,你可以在后台有一个无休止地运行的任务(比如说同步任务)它只听一条消息或某个特定的东西出现,触发它处理一个方法来显示一个对话,一旦它准备好了?这里没有什么好主意。我会继续在谷歌上搜索,如果我找到一个常用的方法,我会告诉你的。我有一个单独的单例类的想法,负责独立于视图模型的任务/函数。如果需要保留在应用程序之外,可能会将其添加到后台任务中。再次为你们在这方面的帮助干杯:)这是一个公平的观点,我没有调查过。在这个场景中,我可以在登录时检查任务是否已完成。不过,如果下次他们打开应用程序时任务完成时我可以更新应用程序,那就太好了。在这种情况下,您可以通过在应用程序和外部服务之间实现数据接口来更新应用程序。例如sqlite db,它将存储后台服务结果,并在下次启动或打开应用程序时更新应用程序。