【问题标题】:How do asynchronous Tasks in Xamarin.Forms work with iOS/Android background modesXamarin.Forms 中的异步任务如何与 iOS/Android 后台模式一起使用
【发布时间】:2020-05-08 19:47:44
【问题描述】:

我已阅读 Microsoft Docs about backgrounding on mobile 并查看了应用程序可能处于的各种生命周期状态。但我仍然对 C# 中的后台任务的想法和 背景在iOS/Android中。

问题
假设我在 ViewModel 或 Model 类中启动了一个新的后台 C# 任务(与确切模式无关)。它通过 WebSocket 接收数据并发出 HTTP 请求,并无限期地运行。当用户将应用程序移至后台时,此任务是否继续运行?如果不是,为什么?我需要做些什么来确保它继续运行?

【问题讨论】:

  • 在Android部分,可以使用依赖服务开启一个前台服务。 docs.microsoft.com/en-us/xamarin/android/app-fundamentals/… 您可以在前台服务中运行您的 Https 请求,当应用程序被用户移动到后台时,它将推送通知并保持服务处于活动状态。
  • @LeonLu-MSFT 谢谢你,一篇很棒的文章。对 Microsoft 文档的期望丝毫不减。因此,如果我不在 Android 中将其注册为前台服务,那么我在代码中某处生成的、在后台线程上运行的常规任务会在应用程序后台运行时自动停止?
  • 如果你不使用前台服务,当你的应用程序在后台时,它会被Android中的GC自动停止。因为您的应用程序没有任何可见的控制来保持应用程序的活动。在Android 8.0之前,我们可以使用普通的Service来保持后台任务运行。但在 Android 8.0 或更高版本中,Android 有后台执行限制,当应用程序在后台时,服务会在几分钟内被杀死。 docs.microsoft.com/en-us/xamarin/android/app-fundamentals/…
  • @LeonLu-MSFT 谢谢,这是有道理的。如果您也能够确定 iOS 要求,那么我很乐意接受它作为答案。

标签: c# xamarin.forms xamarin.android xamarin.ios


【解决方案1】:

在Android部分,可以使用依赖服务开启前台服务。

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

您可以在前台服务中运行您的 Https 请求,当应用程序被用户移动到后台时,它将推送通知并保持服务处于活动状态。

这是我关于使用前台服务的回答,你也可以参考一下。 How to running method webservice in background from android xamarin form

在IOS部分,我建议你通过Backgrounding with Tasks来实现。

https://docs.microsoft.com/en-us/xamarin/ios/app-fundamentals/backgrounding/ios-backgrounding-techniques/ios-backgrounding-with-tasks

您可以将后台 HTTP 请求发送到 BeginBackgroundTask 方法,如下格式代码。

nint taskID = UIApplication.SharedApplication.BeginBackgroundTask( () => {

// your  background HTTP request
});

【讨论】:

  • 谢谢。本节中的措辞令人困惑:docs.microsoft.com/en-us/xamarin/ios/app-fundamentals/…。 “任务完成后,我们调用 EndBackgroundTask 并传入相同的标识符。这很重要,因为如果 BeginBackgroundTask 没有匹配的 EndBackgroundTask,iOS 将终止应用程序”。但我不知道我的任务什么时候结束。根据定义,这是一项长期运行的任务。你能澄清一下吗?
  • 您能否分享一个指向说明后台任务可以在应用程序处于后台时无限运行的文档的链接?我只看过提到 10 分钟限制的文档。
  • 在IOS中,有一些应用程序是允许长时间运行的任务,例如Audio , VoIP External Accessories 和Bluetooth Newsstand .. etc docs.microsoft.com/en-us/xamarin/ios/app-fundamentals/… 但我不建议你伪装成这些应用程序(如果您的应用程序没有这些功能),因为 App Store 不允许您这样做。
  • 是的,我注意到了这些类别,但是我的要求不适合其中任何一个,这让我陷入了困境。
  • 咨询了同事,现在IOS部分没有好办法实现。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-29
  • 2018-12-26
  • 2018-07-26
  • 2016-04-24
  • 2022-09-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多