Xamarin Forms MessagingCenter或DependencyService

时间:2018-07-20 21:09:15

标签: xamarin.forms

我想添加一个后台任务以进行位置跟踪。我看过的所有示例都使用MessagingCenter在PCL和平台组件之间进行通信。到目前为止,我一直在使用DependencyService在PCL和平台之间进行通信。是否有理由将MessagingCenter用于后台任务而不是DependencyService?

3 个答案:

答案 0 :(得分:1)

不知道我是否正确回答了您的问题,但是Dependency Service确实与后台任务无关。这是在项目中实现需要在本机项目中进行不同处理的功能的简便方法。因此,要获得有关异步操作的通知,您应该使用Messaging Center

答案 1 :(得分:0)

您可能必须对每个平台进行特定的操作,然后让他们将结果发布到跨平台的地方。

这是因为当涉及到位置的后台收集时,Android和iOS有很大的不同。使用iOS,您可能会在某些对象上具有事件处理程序,这些事件处理程序会根据时间和距离的容差更改位置,从而接收位置。

在Android上,您需要使用“融合位置”提供程序-Android 8需要此功能。与背景不同,它需要使用FusedLocationApi设置PendingIntent,当位置更改时,它将发送到您的应用程序。在某些情况下,可以将它们分批处理。例如,您的应用可能每隔15分钟被调用一次,其中包含在此期间发生的所有位置更改的集合。您也许可以通过“前台服务”解决此问题。

请注意,如果该插件https://github.com/jamesmontemagno/GeolocatorPlugin仅在Android 8上作为前台服务实现,则该插件只能在Android上正常工作。

我同意@Greggz的观点,即消息传递中心与依赖项注入更多地是针对平台特定实现的实现选择。

答案 2 :(得分:0)

对于所有人的知识...

这是Xamarin MVP的好文字,说明了MessagingCenter的良好用法和误用

我在某些方面不同意(我认为这很好,因为系统之间没有相互耦合),但可以帮助您了解其最佳用法

https://xamarinhelp.com/common-misuse-messagingcenter/

看看

致谢

吉尔赫姆