我需要扑朔迷离的后台服务,这使一分钟的http.get(...)
该服务应在应用运行时在后台运行。如果应用已关闭,则后台服务也应停止。当应用启动时,后台服务也应启动。
我只能找到提供后台服务的程序包,该程序包在应用程序关闭时也可以运行-例如以下示例:https://medium.com/flutter-io/executing-dart-in-the-background-with-flutter-plugins-and-geofencing-2b3e40a1a124
也许我要寻找的不是“后台服务”?
这是一些代码,我想在此后台服务/任务中运行...
Timer.periodic(Duration(seconds: 60), (Timer t) => checkForUpdates());
答案 0 :(得分:0)
我遇到了同样的问题。离开应用程序后,Timer.periodic会在后台运行一段不可控制的时间。我的解决方案是这样的:
class CollectStampsState extends State<CollectStamps> with WidgetsBindingObserver {
Timer timer;
...
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
if (state != AppLifecycleState.resumed) {
timer.cancel();
} else {
if (!timer.isActive) {
timer = Timer.periodic(Duration(seconds: 30), (Timer t) => yourFunction());
}
}
@override
void initState() {
super.initState();
timer = Timer.periodic(Duration(seconds: 30), (Timer t) => yourFunction());
WidgetsBinding.instance.addObserver(this);
}
@override
void dispose() {
timer?.cancel();
WidgetsBinding.instance.removeObserver(this);
super.dispose();
}
@override
Widget build(BuildContext context) {
...
}
}
如果要在其他地方使用它,也可以保存AppLifecycleState,或者更改其他AppLifecycleStates的行为。但是像这样,只有在应用程序处于前台时,计时器才处于活动状态。只要它在后台,计时器就会被取消。