如何在Flutter中执行监视时间的后台任务?

问题描述

我在尝试实现扑朔迷离的后台任务时遇到了困难。我尝试使用android_alarm_manager插件,但由于docs指定了警报管理器不精确,因此:

注意:从API 19(Build.VERSION_CODES.KITKAT)开始,警报传递是不精确的:操作系统将转移警报,以最大程度地减少唤醒和电池消耗。有新的API支持需要严格交付保证的应用程序。请参见setWindow(int,long,long,android.app.PendingIntent)和setExact(int,long,android.app.PendingIntent)。 targetSdkVersion早于API 19的应用程序将继续看到以前的行为,在该行为中,所有警报均在请求时准确地传递。

因此,计时器应每分钟定期运行,有时会错过一分钟:

log of android_alarm_manager plugin

收件人

实现观看时间或捕捉相机运动的过程。

flutter docs(和其他来源)链接到2018年的medium article,作者分享了他开发插件的经验,这些插件利用了Dart代码的后台执行优势。但是我很难理解这篇文章,而且对于简单的任务似乎不知所措...

我还阅读了使用MethodCannel编写平台特定代码的可能性,但是我以前从未使用过android,因此不知道如何做。

是否可以使用一种更简单的方法来快速创建后台任务?想象一个非常简单的应用程序,其唯一目的是在后台运行并检查时间。如果达到了四分之一小时(例如,下午1:15),则该应用应该会发出声音。该应用每半小时应发出另一种声音(例如,下午1:30),而每整整一个小时又发出另一种声音(例如,下午2点)。

这似乎没什么大不了的,但我真的不知道该怎么做。你有什么想法吗?

解决方法

您想做的问题是Android和IOS都不允许您连续运行后台进程。与Android相比,iOS对它的限制更大。

对于IOS,您的应用仅在非常特殊的情况下才能在后台继续运行。例如,这些操作包括播放音频,获取位置更新或从服务器获取最新内容。而且两次执行之间的最小间隔为15分钟。

克服此问题的方法是使用某种调度系统来运行一个简单的过程或允许用户打开该应用程序。

有一些有用的软件包可以帮助您:

但是请注意,这些软件包都无法完全满足您的要求。也许您应该考虑解决问题的替代方法。我在构建警报和计时器时也遇到了类似的问题。如果愿意,您可以分享更多有关您的需求的信息,我们将很乐意为您提供帮助。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...