android - iOS 上的 Flutter Backgroundfetch 不会触发

标签 android ios flutter background-fetch

我正在尝试开发一个使用 background_fetch 包 https://pub.dev/packages/background_fetch 的应用程序。在特定时间段内连接到 BLE 设备并接收一些状态数据。在 Android 上,一切正常,并且每 x 分钟可靠地触发一次后台提取。
在 iOS 上,只要我通过 Xcode 手动模拟后台提取,它也可以工作。但是,当我在 iPhone 上运行我的应用程序时,后台获取永远不会被触发。对我来说,很难理解我的代码是否有错误,或者 iOS 是否真的从不触发后台提取。如果操作系统从不触发后台提取,我怎么能触发呢?
我从其他帖子中了解到,只要后台获取在模拟器中工作,一切都被正确编程。
能否以某种简单的方式向我解释后台获取机制在 iOS 上的工作原理?
感谢你并致以真诚的问候。

最佳答案

我想分享一些我在尝试解决这个问题时开始理解的观点:
即使他们在软件包网站上说 iOS 不支持计划任务,我也没有真正理解这意味着什么,因为使用后台任务的概念对我来说不是或仍然不是 100% 清楚。
据我了解,这基本上意味着iOS支持的唯一后台获取机制是在 minimumFetchInterval 参数定义的特定时间段内发生的默认后台获取。这可以至少为 15 分钟或更长时间,但绝不会少于 15 分钟,并使用示例中的以下代码段实现:

int status = await BackgroundFetch.configure(BackgroundFetchConfig(
        minimumFetchInterval: 15,
        stopOnTerminate: false,
        enableHeadless: true,
        requiresBatteryNotLow: false,
        requiresCharging: false,
        requiresStorageNotLow: false,
        requiresDeviceIdle: false,
        requiredNetworkType: NetworkType.NONE
    ),
但是,您无法真正测试 fetch 事件 - 无法使用模拟器或真实设备。
使用 Xcode,您可以通过从 IDE 触发来模拟后台提取。但是在定义的时间段之后,模拟器本身永远不会发生后台获取。如果您连接真正的 iPhone 并在此设备上部署您的应用程序,则不会发生这种情况。据我了解,该应用程序将在另一个生命周期中运行(无论这究竟意味着什么),在该生命周期中,应用程序将没有时间来执行后台任务。
尽管如此,如果 iOS 没有为我的应用程序安排后台执行时间,我仍然无法理解如何或何时可以在真实设备上观察我的应用程序行为。我可以确定,如果它可以在模拟器上运行,它也可以在真实设备上运行吗?
如果有更好理解的人可以提供帮助,那就太好了。

关于android - iOS 上的 Flutter Backgroundfetch 不会触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66783089/

相关文章:

android - 为什么 Kotlin 允许在不同的文件夹中有两个具有相同名称和包的类(即 : main and androidTest)?

Flutter:调用 SetState 后,光标位置在 TextField 中向左移动

android - 支持库 r21 中的样式 SwipeRefreshLayout

android - 从android中的 Activity 调用 fragment

ios - 我在 Pod 文件中的 Protobuf/Wrappers 导入中收到了 swift 错误

iphone - 我想将 UIActivityIndi​​cator 放在 UIScrollView 上

ios - Monotouch 内存 View Controller 问题

android - 如何在 flutter 中断开电话?

json - 在Flutter中显示来自API Json响应的结果时出现错误

java - src.type() == CV_8UC1 断言在校正图像时失败