首页 > 解决方案 > Xamarin.Forms 后台/前台服务最佳做法?

问题描述

我正在使用 Xamarin.Forms 构建一个应用程序,该应用程序将定期(重新:每秒)潜在地做一些事情,无论应用程序是在前台还是后台。想想像定时器/时钟这样的东西。

我发现了很多关于 Android 方面的信息。看起来在 8 之前,您可以在服务中运行它——而在 8 或更高版本中,您需要将其作为前台服务运行。

例如 https://docs.microsoft.com/en-us/xamarin/android/app-fundamentals/services/foreground-services

据我所知,如果我想编写任何类型的控制器来初始化此服务(仅在我的客户端应用程序中需要时),我必须将 Mono.Android 添加到主共享库中,这似乎是错误的事情这样做,因为 iOS 版本也会有这种依赖关系。

但是,当我搜索它时,iOS 文档有点参差不齐,最佳实践也是如此。我不确定正确的路线是否是做背景 - 或者这是否会关闭。

例如 https://docs.microsoft.com/en-us/xamarin/ios/app-fundamentals/backgrounding/introduction-to-backgrounding-in-ios

似乎 Xamarin.Forms 在过去几年的工作方式上取得了长足的进步——即使是 2016 年到 2017 年,也发生了许多变化。网络上充斥着大量关于所有这些的不同(并且不再有效)的教程。

现在,我有一个状态跟踪器的单例实例,可以调用它来每秒更新一次(或其他控件,即向前跳一分钟)。

有没有跨平台前台服务开发的最佳实践?在这一点上,我最好的猜测是从该控制器发布消息事件,在 iOS 和 Android 项目的主体中使用特定代码,然后它们将“知道”如何创建适当的服务,然后调用该状态的单例实例-我之前提到的跟踪器(每秒运行一次)。

是否有任何最佳实践或其他任何与此发布一样简单的东西?定期调用,在服务“初始化”时在后台运行,并根据需要对状态服务进行调用以跟踪/宣布不同的状态。

标签: androidiosxamarin.forms

解决方案


Xamarin.Forms 只是用户界面跨平台开发,并且由于 Xamarin.Forms 基于 .Net,您还可以使用 .Net 中可用的所有内容进行跨平台开发。这就是开箱即用的程度。.Net 中不可用的一些跨平台功能包含在 Xamarin.Essentials 等官方和非官方插件中。

总而言之,除非有您需要的插件(我不知道),否则您需要使用原生 Android 和 iOS 功能。你也受到他们的限制。

无法在 iOS 上以可预见的方式在后台运行应用程序。虽然可能有一些解决方法,比如使用推送通知,但在一般情况下,它们都不能很好地工作。


推荐阅读