如何创建在应用程序关闭时也能正常工作的 Flutter 后台服务

Posted

技术标签:

【中文标题】如何创建在应用程序关闭时也能正常工作的 Flutter 后台服务【英文标题】:How to create a Flutter background service that works also when app closed 【发布时间】:2020-09-23 15:20:58 【问题描述】:

我正在为大学的学术目的开发 Flutter 应用。现在,我需要运行一种“永远在线”的后台服务,以便使用蓝牙,最重要的是从外部 REST API 获取定期更新。

我已经检查了 pub.dev 中的这两个库(this 和 this),但没有找到开箱即用的完美解决方案(正如预期的那样......)。我还看到了 Kotlin 原生的东西 (here)。我想知道什么是实现我的目标的最佳选择(就最佳实践、完整性和简单性而言)。

查看下图以获得更示意图:

【问题讨论】:

轻松使用***.com/a/66531599/5106574 【参考方案1】:

Can I run Dart code in the background of an Flutter app?

是的,您可以在 iosandroid 上的后台进程中运行 Dart 代码。如需更多信息,请参阅Medium article Executing Dart in the Background with Flutter Plugins and Geofencing。

感谢Raouf Rahiche

【讨论】:

感谢您的回复。我已经在 Medium 上看过那篇文章。这很有趣,但我想知道与我需要做的相比,它是否不太复杂。 这能否存活原生如何处理进程?如果 Android 杀死后台应用进程怎么办? @JongzPuangput 进程没有一直运行,会在短时间内被杀死。 Android 上有两种启动进程的方式:要么是由 Android 操作系统初始化的周期性任务,要么是由 Android Intent 触发。【参考方案2】:

对于这种事情,你必须依赖原生机制。

在“始终存在”的后台组件中处理 API 的最有效方法是实现推送通知服务。 使用这种技术,远程服务器能够开始与您的应用通信,唤醒它,然后执行任何需要执行的任务。

此外,在 Android 中,您有 foreground services,即使应用程序关闭,它也会运行。

【讨论】:

非常感谢您的回复。我很害怕要得到我想要的东西,就必须实现一个本地解决方案。所以现在的问题是做这类事情的进一步复杂性......我应该从哪里获得一个想法而不遇到过于复杂的事情? 也许最快的方法是使用 Firebase 之类的工具来实现推送通知机制,这样您就不必自己管理所有服务器基础架构。然后查看 pub.dev 是否​​有任何包要注册以推送通知...如果没有,您将不得不自己在 iOS 和 Android 中实现本机代码... 好的,谢谢。问题是我们已经有一个 Spring REST 后端用于我们的项目。所以 firebase 不是一个选择。 我只是建议 Firebase 的易用性和速度,但如果您已经有后端,那么您也可以将其用于通知。 你也可以使用这个包pub.dev/packages/background_fetch【参考方案3】:

您可能想看看flutter_background_service 包。它有助于在后台执行 Dart 代码。

【讨论】:

【参考方案4】:

我推荐使用具有良好文档的android_long_task 插件

如果您想使用 Android 前台服务运行长时间运行的任务并开始监听在该服务中运行的任务的更新和进度。您也可以根据需要更新前台服务通知。

【讨论】:

以上是关于如何创建在应用程序关闭时也能正常工作的 Flutter 后台服务的主要内容,如果未能解决你的问题,请参考以下文章

为啥在 IntentService 中进行的 BLE 扫描即使在服务被破坏时也能继续工作?

用户如何在触摸时也能画出线条跟随手指?Android 开发

即使在暂停时也能获取 iOS 应用的位置更新

手电筒应用程序在后台关闭

Eventlet heroku flasksocketio 应用程序不工作

NIO 是不是在使用 /dev/shm 中的小型序列化流时也能提供优势?